MVC4 Ajax.ActionLink将UpdateTargetId发送到服务器

时间:2012-06-23 18:48:27

标签: asp.net-mvc-3 asp.net-mvc-4

我正在使用Ajax.ActionLink制作严肃的asp.net mvc ajax请求。

但是从服务器i请求相同的URL可能会填充不同的html容器(UpdateTargetId)。 一切都很好,但我需要知道服务器应该返回什么视图。

我看了fiddler并没有找到任何有关UpdateTargetId值的信息。 然后我意识到我可以在OnBegin javascript方法中添加一些数据,但我也不知道UpdateTargetId。

所以现在我正在使用不同的http方法(比如post和get),但是我想找到更少的hacky解决方案。

2 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,您可能希望在视图中执行以下操作:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<div id="testid" class='blah'></div>
@Ajax.ActionLink("Show Test Options", "ShowTestOptions", "Test", new { theVariableIWant = "Test" }, new AjaxOptions { UpdateTargetId = "testid", HttpMethod = "GET" })

然后在你的控制器中有类似的东西:

public class TestController : Controller
{
   [HttpGet]
   public PartialViewResult ShowTestOptions(string theVariableIWant)
   {
        ///Perform whatever operations you need to here.
        return PartialView();
   }
}

尽管如此,我们将不胜感激。

答案 1 :(得分:0)

它不完整而且仍然是hacky但也许是唯一的方式

在jquery.unobtrusive-ajax.js中刚刚更改了

$("a[data-ajax=true]").live("click", function (evt) {
        evt.preventDefault();
        asyncRequest(this, {
            url: this.href,
            type: "GET",
            data: []
        });
    });

$("a[data-ajax=true]").live("click", function (evt) {
        evt.preventDefault();
        asyncRequest(this, {
            url: this.href,
            type: "GET",
            data: [{ name: "targerId", value: this.getAttribute("data-ajax-update") }]
        });
    });

或在asyncRequest方法中添加另一个推送:

...
options.data.push({ name: "X-Requested-With", value: "XMLHttpRequest" });
options.data.push({ name: "targerId", value: element.getAttribute("data-ajax-update") });
...

我不想更改不显眼的代码并将Ajax.ActionLink更改为自定义ActionLink,它使用不同的标志来触发ajax请求(例如[data-customajax = true]“)来分隔它们。 如果有人对这些答案有疑问,我很乐意帮助你!