Ajax 更新第一个局部视图后,如何刷新第二个局部视图?

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

我有一个部分视图的页面,它是一个登录表单。单击submit按钮时,它会调用控制器,让此人登录,并刷新登录表单以显示他已登录

我现在需要更新屏幕上显示登录按钮的部分,或者如果他已登录,则显示Hello,logged user

我写了一个局部视图,显示这个人是否登录,但我不知道在第一个成功后如何调用它。我知道有一个OnSuccess事件,这似乎是我将连接起来的地方,但我不知道如何做到这一点

 @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");
    }