想象一下具有部分视图的以下架构。
有时,当我们的应用程序出现错误时,由于此处未解释的原因,部分视图会全屏刷新。 此外,如果您复制/粘贴部分视图的网址,则会以全屏加载。
我们正在尝试找到一种解决方案,在加载部分视图网址时,它会正确加载完整的上下文并在自己的上下文中显示部分视图。 Windows Azure设法执行此操作(http://manage.windowsazure.com),我们愿意模仿此功能。
我们尝试在互联网上进行一些搜索,例如"在正确的上下文中刷新部分","问题部分视图在全屏刷新"等等...但我们还没有找到一种正确实现这一目标的方法。
有没有任何框架或解决方案可以做到这一点?你的想法是什么?
答案 0 :(得分:1)
如果您使用部分视图,则涉及明显的 ajax ,您需要做的是通过ajax进行部分视图。
例如:
如果你有部分内部表格你需要 Ajax.BeginForm 而不是 Html.BeginForm ,还有一件事是 jquery.unobtrusive-ajax < / strong>在主布局中存档以使工作正常。
如果你使用局部视图,那么你必须通过ajax处理事情的其他事情也是如此,这样你就不会失去上下文。
我希望它有所帮助。
答案 1 :(得分:0)
如果你想避免完全刷新,你必须使用ajax并替换id中的内容。如果这是你计划做的事情,这应该是一件容易的事。
您应该只需要将部分视图网址传递给jQuery.get。 jQuery.get
我希望你能找到的是什么。
答案 2 :(得分:0)
部分视图适用于可在网站上的许多地方使用的可重复使用的视图。
如果我们通过ajax加载它,我觉得这非常有用。
以下是示例。这也可以避免全屏刷新
_Layout.cshtml(或任何将加载部分页面的视图页面)
<div>
<h2>This is Partial View content</h2>
<div id="content"></div>
</div>
<script>
$(function () {
$("#content").html("Loading...");
setTimeout(function () { LoadPartialView(); }, 5000);
});
function LoadPartialView() {
$.ajax({
type: "GET",
url: '@Url.Action("GetPartialView", "Home")',
dataType: "html",
success: function (data) {
$("#content").empty();
$("#content").html(data);
$("#content").fadeIn('slow');
},
error: function (data) {
$("#content").empty();
}
});
};
</script>
<强>模型强>
public class TestModel
{
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
控制人员的行动
[HttpPost]
public PartialViewResult GetPartialView()
{
TestModel model = new TestModel();
model.Name="SomeName";
model.Address="Somewhere";
model.Age=25;
return PartialView("_PartialTestPage", model);
}
<强>已更新强>
为避免对部分视图进行硬编码访问,请使用重定向操作方法,该方法将重定向到主视图。像这样的东西。
[HttpGet]
[ActionName("MyOverloadedName")]
public ActionResult GetPartialView()
{
return RedirectToAction("Index", "Home"); //redirect to the main view
}
您可以通过设置HttpGet / HttpPost来制作两个具有相同名称的不同操作方法。 请在此处查看更多替代解决方案Can you overload controller methods in ASP.NET MVC?。