Ajax 更新第一个局部视图后,如何刷新第二个局部视图?
我有一个部分视图的页面,它是一个登录表单。单击submit按钮时,它会调用控制器,让此人登录,并刷新登录表单以显示他已登录 我现在需要更新屏幕上显示登录按钮的部分,或者如果他已登录,则显示Hello,logged user 我写了一个局部视图,显示这个人是否登录,但我不知道在第一个成功后如何调用它。我知道有一个OnSuccess事件,这似乎是我将连接起来的地方,但我不知道如何做到这一点Ajax 更新第一个局部视图后,如何刷新第二个局部视图?,ajax,asp.net-mvc,asp.net-mvc-partialview,Ajax,Asp.net Mvc,Asp.net Mvc Partialview,我有一个部分视图的页面,它是一个登录表单。单击submit按钮时,它会调用控制器,让此人登录,并刷新登录表单以显示他已登录 我现在需要更新屏幕上显示登录按钮的部分,或者如果他已登录,则显示Hello,logged user 我写了一个局部视图,显示这个人是否登录,但我不知道在第一个成功后如何调用它。我知道有一个OnSuccess事件,这似乎是我将连接起来的地方,但我不知道如何做到这一点 @using (Ajax.BeginForm("Login", "Account", new AjaxOpt
@using (Ajax.BeginForm("Login", "Account", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "loginSection", }))
{
<div id="loginSection">
...form omitted for clarity.
<input type="submit" value="Log in" />
</div>
}
这是登录后需要更新的部分视图
<ul id="menu">
@if (Request.IsAuthenticated)
{
<text>
Hello, @User.Identity.Name
</text>
}
else
{
<ul>
<a onclick="openLoginWindow()">Login</a>
<a onclick="openRegisterWindow()">Register</a>
</ul>
}
不要使用Ajax.BeginForm,而是使用普通表单并使用自定义代码发布表单,这样您就可以随心所欲地控制成功处理程序
<div id="login">
@using(Html.Beginform())
{
<input type="text" name="UserName" />
<input type="text" name="Password" />
<input type="submit" id="btnLogin" />
}
</div>
因此,javascript代码期望从控制器操作中得到如下所示的JSON结构
{
"Status":"Authenticated",
"PartialViewContent" : "<p>The markup you want to show</p>"
}
将告诉您如何将JSON属性中的部分视图标记发送到客户端。以下是我的工作原理: 成功时添加:
@using (Ajax.BeginForm("Login", "Account", new AjaxOptions {
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "loginSection",
OnSuccess = "successfulLogin"
}))
{... details omitted.
然后加上这个,
function successfulLogin() {
$('#loginPartial').load('Account/LoginLinksPartial');
哪个在控制器中调用:
public ActionResult LoginLinksPartial()
{
return PartialView("_LoginLinks");
}
function successfulLogin() {
$('#loginPartial').load('Account/LoginLinksPartial');
public ActionResult LoginLinksPartial()
{
return PartialView("_LoginLinks");
}