部分视图可否在没有回传的情况下重新渲染?
问题描述:
- 在ASP.NET MVC和jQuery一起运行 -部分视图可否在没有回传的情况下重新渲染?
我使用jQuery将<LI>
块渲染为下拉菜单项列表。如果用户没有登录,那么在该列表中有3个项目 - 如果他已经登录,则有4个项目。第四个项目需要运行一对条件,然后才能确定它携带的是什么有效载荷,因此我将该代码放在.ascx中控制和主页呼叫:
<div id="loginBox">
<% Html.RenderPartial("showLoginStatus"); %>
</div>
以决定如何呈现它。
只要我愿意等待基于AJAX登录的回发,这个工作就很有用。我现在需要做的是让代码在没有页面刷新的情况下运行。
,显示无论是登录按钮或用户名页面的部分看起来像:
var form = $("#loginForm");
form.submit(function() {
var data = form.serialize();
$.post(form.attr("action"), data, function(result, status) {
if (result.Success) {
$(".showLoggedUser").html(result.UserName + '<br /><a href="/Admin/Account/LogOut">Log Out</a>');
//how can I force the code contained in 'showLoginStatus.ascx' to render at this point?
api.close();
} else {
$('.loginErrors').html(result.ErrorMessage);
}
}, "json");
return false;
});
});
答
您可以在结果中返回ShowLoginStatus.ascx的HTML(可能是JSON)。
Here是如何将视图渲染为字符串来实现的。
另一种方法是根据结果从动作中返回不同的内容类型。
- 用户输入凭据并单击登录。
- 服务器检查它们和:
- 如果正确 - 呈现部分视图(所以结果是HTML)。
- 如果没有 - 与错误的描述等
- 在客户端呈现JSON - 如果内容是HTML - 然后将其设置为徘徊无论它是必要的。
- 如果内容是JSON - 向用户显示错误并进一步分析结果。
那么你的JavaScript将是这样的:
var form = $("#loginForm");
form.submit(function() {
var data = form.serialize();
$.post(form.attr("action"), data, function(result, status) {
// Write your isJson function to check the result type
if (!isJson(result)) {
$(".showLoggedUser").html(result);
api.close();
} else {
$('.loginErrors').html(result.ErrorMessage);
}
}); // DO NOT SPECIFY RESULT TYPE
return false;
});
});
答
那么如果Ajax请求是返回包括showLoginStatus内容的局部视图?
即有ajax调用返回PartialView(.ascx)并且该部分视图由showLoginStatus视图和您需要的任何额外标记组成的操作。
也许看看Ajax.ActionLink和AjaxOptions参数来获得其他想法?
你有没有考虑过使用updatepanel?虽然updatepanels被称为“缓慢”,但使用firebug可以查看实际返回的数据量。它可能很小,但它应该可以帮助您节省大量的时间和检查页面生命周期 – 2009-08-19 00:30:41