ASP.. NET MVC4 Ajax ActionLink helper不起作用——用返回的部分视图重新加载整个页面
本文关键字:新加载 加载 视图 ActionLink Ajax MVC4 NET helper 不起作用 ASP 返回 | 更新日期: 2023-09-27 18:02:55
我有一个非常简单的MVC项目索引页,它允许您创建"作业"和编辑现有的作业。我试图使用Ajax链接将div的内容替换为作业编辑表单,Create()和Edit()操作将其作为部分视图返回。相反,当您单击Ajax链接时,整个页面内容将被部分视图取代,而不仅仅是适当div元素的内容。下面是相关的。cshtml代码:
@{
string placeholder = "777777";
}
<body>
<ol id="JobListing">
@Html.Partial("_ExportJobListingPartial", Model)
</ol>
<br /><br /><br />
@Ajax.ActionLink("New", "Create", new AjaxOptions { UpdateTargetId = "EditJobContainer", InsertionMode = InsertionMode.Replace, HttpMethod = "GET" })
<br /><br />
<div id="EditJobLinkContainer">
@Ajax.ActionLink("Edit", "Edit",
new { id = placeholder }, // Route values
new AjaxOptions { UpdateTargetId = "EditJobContainer", InsertionMode = InsertionMode.Replace, HttpMethod = "GET" }, // Ajax options
new { id = "EditJobLink" } // Html attributes
)
</div>
<br /><br />
<div id="EditJobContainer">
EMPTY BOX HERE
</div>
<br />
</body>
</html>
<script>
$(function() {
$("#JobListing").selectable({
selected: function (event, ui) {
// Select only one at a time
$(ui.selected).addClass("ui-selected").siblings().removeClass("ui-selected");
$("#EditJobLinkContainer").html('@Ajax.ActionLink("Edit", "Edit",
new { id = placeholder }, // Route values
new AjaxOptions { UpdateTargetId = "EditJobContainer", InsertionMode = InsertionMode.Replace, HttpMethod = "GET" }, // Ajax options
new { id = "EditJobLink" } // Html attributes
)');
$("#EditJobLink").click(UpdateOnClick);
}
});
$("#EditJobLink").click(UpdateOnClick);
function UpdateOnClick() {
//Get the id of the selected item
var id = $(".ui-selected").first().attr("name");
this.href = this.href.replace("@placeholder", id);
}
});
</script>
我在网上读到的大多数类似问题的答案都表明,也许我没有正确地或在正确的地方包括不引人注目的ajax代码。我在_Layout视图中,在RenderBody()调用之前,作为
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
我知道这段代码正在加载,因为我插入了一个alert()调用到页面加载时启动的ajax.js文件中,并且链接到Chrome中的代码工作得很好。然而,我不得不在ajax脚本中用on()手动替换对live()的调用,因为live()在最新版本的jQuery中已弃用,尽管我很确定它们是使用MVC4的最新脚本。在某一时刻,Ajax调用实际上是为"New"链接工作的,但是从那以后我做了一些更改,现在已经好几天没有任何工作了。
我使用了一个空的专用div
的HTML是
<div id="targetDiv">
,脚本是
$(".get-roles").live("click", function (e) {
$("#targetDiv").empty();
$.ajax({
url: "edit",
type: 'GET'
xhrFields: {
withCredentials: true
},
success: function (data) {
if (data) {
$("#targetDiv").append(data);
}
else {
$("#targetDiv").text("Error");
}
}
});
});
你需要在你的页面中包含这个
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>