ASP.NET MVC:AJAX ActionLink-定位HTML属性

时间:2009-01-28 18:21:01

标签: .net asp.net-mvc asp.net-ajax

我有一个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 个答案:

答案 0 :(得分:8)

Ajax帮助程序的默认行为不支持此操作。但是,您可以创建在Ajax请求返回时运行的自定义JavaScript处理程序,然后使用该处理程序将值注入属性

创建一个通用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助手做了类似的事情。如果您遇到问题,请在评论中发帖,我很乐意为您提供帮助!如果有效,请在评论中告诉我们!

如果您有源(you can get it on CodePlex),可以查看MicrosoftMvcAjaxScript项目中的AjaxContext.cs文件,以获取可以从OnCompleted处理程序访问的属性的完整列表

答案 1 :(得分: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." } ); %>

答案 2 :(得分:0)

我想,更简单一点,你可以使用Url.Action(你设置一个返回你想要的字符串的动作,但不是返回你使用Response.Write(...)。

甚至更简单,你使用src =“&lt;%= ViewData [”src“]%&gt;”在你的标签!

我看到你已经有了一个解决方案,但这可以节省你下次的时间..