ASP.net MVC 5部分视图Ajax POST不只更新部分

时间:2018-12-06 13:09:44

标签: ajax asp.net-mvc

我有一个局部视图,它不仅仅更新局部视图,它还重定向到整个页面的操作。

在局部视图_registerAccount.cshtml中,该视图包含要注册的发布请求,该请求是通过Ajax在名为_registerAccount的视图中发出的,如下所示:

@model LoginDemo.Models.LdapAccountModel

@using (Ajax.BeginForm("RegisterLdapAccount", "Account", new AjaxOptions
{
    HttpMethod = "Post",
    InsertionMode = InsertionMode.Replace
}))
{
    @Html.ValidationSummary()
    @Html.LabelFor(x => Model.Email) @Html.TextBoxFor(x => Model.Email, new { id = "reg-ytu-email" })
    <br />
    @Html.LabelFor(x => Model.Password) @Html.PasswordFor(x => Model.Password, new { id = "reg-pw" })
    <input type="submit" value="Register" class="btn" />
}

在父页面中,Register.cshtml我有:

@model LoginDemo.Models.RegisterModel
...            
<div class="panel hide register-type register-ytu">
  @Html.Partial("_registerAccount")
</div>

在帐户控制器中,ajax请求转到RegisterAccount操作:

    [HttpPost]
    public async Task<ActionResult> RegisterLdapAccount(LdapAccountModel model)
    {
        if (model.exists()) // pseudo code
        {
            return Json(new {foo: "bar"}); // return address to redirect to
        }
        else
        {
            ModelState.AddModelError("", "You must have a valid account.");

            return PartialView(model); // return error
        }
    }

我的问题是,返回的所有内容都会擦除整个页面,而不是仅更新父页面中的部分页面。也就是说,如果JSON返回成功,则仅返回JSON;如果失败,则部分视图返回仅返回部分。

n.b。我的web.config中有<add key="UnobtrusiveJavaScriptEnabled" value="true" />

1 个答案:

答案 0 :(得分:1)

如下修改以下代码:

@using (Ajax.BeginForm("RegisterLdapAccount", "Account", new AjaxOptions
{
    HttpMethod = "Post",
    InsertionMode = InsertionMode.Replace,
UpdateTargetId = "updatearea",

修改div以添加ID:

<div id="updatearea" class="panel hide register-type register-ytu">
  @Html.Partial("_registerAccount")
</div>

现在,如果您还没有的话,请确保页面上的脚本具有不可信的Ajax。

<script type="text/javascript" src="@Url.Content("/scripts/jquery.unobtrusive-ajax.min.js")"></script>

要添加此脚本,它必须位于项目的scripts文件夹中。

修改控制器,以便您加载正确的局部视图,如果您未声明局部视图的名称,则加载的局部视图将与操作名称匹配,如果没有局部视图与名称匹配该操作不会加载任何局部视图。因此,像这样明确声明要加载的局部视图:

返回PartialView(“ _ RegisterAccount”,模型)