- 在ASP.NET MVC中与jQuery一起运行 -
我正在使用jQuery将<LI>
块渲染为下拉菜单项列表。如果用户没有登录,那么该列表中有3个项目 - 如果他__已登录,则有4个项目。第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;
});
});
答案 0 :(得分:1)
您可以在结果中返回ShowLoginStatus.ascx的HTML(可能是JSON)。
Here是如何将视图渲染为字符串以实现这一点的。
另一种方法是根据结果从操作中返回不同的内容类型。
所以你的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;
});
});
答案 1 :(得分:0)
如果ajax请求是要返回包含showLoginStatus内容的部分视图呢?
即。有一个ajax调用它返回PartialView(.ascx)的动作,而Partial视图由showLoginStatus视图和你需要的任何额外标记组成。
也许看一下Ajax.ActionLink和AjaxOptions参数来获得其他一些想法?