我正在使用Ajax.ActionLink制作严肃的asp.net mvc ajax请求。
但是从服务器i请求相同的URL可能会填充不同的html容器(UpdateTargetId)。 一切都很好,但我需要知道服务器应该返回什么视图。
我看了fiddler并没有找到任何有关UpdateTargetId值的信息。 然后我意识到我可以在OnBegin javascript方法中添加一些数据,但我也不知道UpdateTargetId。
所以现在我正在使用不同的http方法(比如post和get),但是我想找到更少的hacky解决方案。
答案 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]“)来分隔它们。 如果有人对这些答案有疑问,我很乐意帮助你!