如何在 MVC 5 中使用 JQuery 来加载视图而不是部分视图
How do I use JQuery with MVC 5 to load a View instead of a partial View
我有一个流程,它使用不同的数据多次循环访问同一视图,然后最终在流程结束时转到不同的视图。
数据是一个正在排序的列表,所以我使用 jQuery 来访问列表的顺序
我使用 jQuery 通过使用嵌入式局部视图来更新视图
查看
<div id="SequenceListPartialView">
@{Html.RenderPartial("SequenceListPartial", Model);}
</div>
<a id="btn_acceptSequence" class="btn btn-default" >Accept sequence</a>
@section Scripts {
@* required for sequencing *@
@Scripts.Render("~/bundles/jquerysortable")
<script type="text/javascript">
$(function() {
//Sets the list to sortable
$("#sequencedList").sortable(
{
});
//Event handler for Accept button
$("#btn_acceptSequence").click(function () {
var sequenceID_CSV = "";
$("#sequencedList").children().each(function(i) {
var div = $(this);
sequenceID_CSV += div.attr("id") + ':' + i + ',';
});
$.ajax({
url: "@Url.Action("UpdateSequence")",
type: "POST",
//dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ orderedIds: sequenceID_CSV }),
})
.success(function (result) {
$("#SequenceListPartialView").html(result);
})
.error(function(xhr, status) {
alert(status);
});
});
});
</script>
}
服务器端
服务器操作数据,创建新模型并将其发回
return PartialView("SequenceListPartial",myModel);
所有这些都有效。
我的问题是在流程完成时结束,我想 return 完整查看
return View("OverView", MyOtherModel);
因为我使用 $.ajax 调用(我认为)我的新视图作为部分视图嵌入到之前的完整视图中。
如果我不使用 $.ajax 来调用局部视图,而是为我要排序的每个列表调用一个新视图,那对我来说会更好,但我已经尝试这样做并且无处可去。
我的问题是:
- 我可以 "abort" 在我的 ActionResult 中调用 ajax 和 return 视图
- 我可以使用不同的技术来始终调用视图而不是 Ajax/Partial 视图
- 我正在学习 MVC,所以如果这完全是错误的方法,我想知道正确的方法
我对你的描述有点困惑,我认为你实际上在谈论别的东西。视图和分部视图之间的唯一区别是视图呈现您的布局模板,分部视图则不会。就是这样。
Ajax 没有部分视图与完整视图的概念,它只会将返回的 HTML 放在您指定的任何位置。所以很有可能,你只是没有告诉它把 HTML 放在正确的位置。如果你要替换整个东西,那么你想替换根 html 节点上的 html。
我有一个流程,它使用不同的数据多次循环访问同一视图,然后最终在流程结束时转到不同的视图。 数据是一个正在排序的列表,所以我使用 jQuery 来访问列表的顺序
我使用 jQuery 通过使用嵌入式局部视图来更新视图
查看
<div id="SequenceListPartialView">
@{Html.RenderPartial("SequenceListPartial", Model);}
</div>
<a id="btn_acceptSequence" class="btn btn-default" >Accept sequence</a>
@section Scripts {
@* required for sequencing *@
@Scripts.Render("~/bundles/jquerysortable")
<script type="text/javascript">
$(function() {
//Sets the list to sortable
$("#sequencedList").sortable(
{
});
//Event handler for Accept button
$("#btn_acceptSequence").click(function () {
var sequenceID_CSV = "";
$("#sequencedList").children().each(function(i) {
var div = $(this);
sequenceID_CSV += div.attr("id") + ':' + i + ',';
});
$.ajax({
url: "@Url.Action("UpdateSequence")",
type: "POST",
//dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ orderedIds: sequenceID_CSV }),
})
.success(function (result) {
$("#SequenceListPartialView").html(result);
})
.error(function(xhr, status) {
alert(status);
});
});
});
</script>
}
服务器端 服务器操作数据,创建新模型并将其发回
return PartialView("SequenceListPartial",myModel);
所有这些都有效。
我的问题是在流程完成时结束,我想 return 完整查看
return View("OverView", MyOtherModel);
因为我使用 $.ajax 调用(我认为)我的新视图作为部分视图嵌入到之前的完整视图中。
如果我不使用 $.ajax 来调用局部视图,而是为我要排序的每个列表调用一个新视图,那对我来说会更好,但我已经尝试这样做并且无处可去。
我的问题是:
- 我可以 "abort" 在我的 ActionResult 中调用 ajax 和 return 视图
- 我可以使用不同的技术来始终调用视图而不是 Ajax/Partial 视图
- 我正在学习 MVC,所以如果这完全是错误的方法,我想知道正确的方法
我对你的描述有点困惑,我认为你实际上在谈论别的东西。视图和分部视图之间的唯一区别是视图呈现您的布局模板,分部视图则不会。就是这样。
Ajax 没有部分视图与完整视图的概念,它只会将返回的 HTML 放在您指定的任何位置。所以很有可能,你只是没有告诉它把 HTML 放在正确的位置。如果你要替换整个东西,那么你想替换根 html 节点上的 html。