ASP.NET MVC:AJAX ActionLink- 目标HTML属性

5

我有一个Ajax actionlink,它在控制器方法中请求一个字符串。我想将该字符串插入到超链接的属性中。如何指定目标id元素的属性字段?

<img id="CHANGE-MY-SRC" src=ViewData["src"] >

<%=Ajax.ActionLink("Change IMG Source","actionChange",new AjaxOptions()         
UpdateTargetId="CHANGE-MY-SRC"})%>

public string actionChange()
{
   ViewData["src"]= "somethingNew";

   return ????????
}
3个回答

8
默认情况下,Ajax助手不支持此功能。但是,您可以创建一个自定义JavaScript处理程序,在Ajax请求返回时运行该处理程序,然后使用它将值注入属性中。
创建一个通用的JavaScript文件(例如,在Master页面中加载它),并添加以下函数:
// Creates an Ajax OnComplete handler that will inject 
///the contents into the specified attribute, rather than the InnerHtml
function createAttributeInjector(attributeName) {
    return function(ajaxContext) {
        if(ajaxContext.get_updateTarget() !== null) {
            ajaxContext.get_updateTarget()[attributeName] = ajaxContext.get_data();
        }
        // IMPORTANT: Suppress the default behavior!
        return false;
    }
}

然后,在构建您的Ajax链接时:
Ajax.ActionLink("Change IMG Source", "actionChange", new AjaxOptions() {
    UpdateTargetId="CHANGE-MY-SRC", 
    OnCompleted="createAttributeInjector('src')"
}

免责声明:我还没有测试过这个,但我已经用Ajax助手做了类似的事情。如果您遇到问题,请在评论中发布我的答案,我很乐意帮忙!如果它有效,请在评论中告诉我!
如果您有源代码(您可以在CodePlex上获取它),您可以检查MicrosoftMvcAjaxScript项目中的AjaxContext.cs文件,以获取您可以从OnCompleted处理程序中访问的所有属性的完整列表。

2

我不确定你的意思,但是你可以提供一组HTML属性来使用ActionLink扩展的某些版本。

Ajax.ActionLink( string linkText,
                 string action,
                 object routeValues,
                 AjaxOptions ajaxOptions,
                 object htmlAttributes )

例子:

<%= Ajax.ActionLink( "add",
                     "AddThing",
                     new { id = ViewData.Model.ID },
                     new AjaxOptions { Confirm = "Are you sure?",
                                       UpdateTargetId = "thingList"
                                     },
                     new { title = "Add a thing to the database." } ); %>

目标ID是图像标签的ID,当ajax调用返回“新文本”时,我想将标签的src属性更改为src =“新文本”。 - zsharp

0
我猜更简单的方法是,您可以使用Url.Action(设置要返回所需字符串的操作,但不返回,而是使用Response.Write(...)。

或者更简单地,在标记中使用src =“& lt;%= ViewData [“ src”]%&gt;”!

我看到您已经有了解决方案,但下次这可能会节省您的时间..


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接