ASP.net MVC 5 частичное представление Ajax POST не обновляет только частичное - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть частичное представление, которое не обновляет только частичное, оно перенаправляет на действие для всей страницы.

В частичном представлении _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, в случае неудачи возвращение частичного представления возвращает только частичное.

nb У меня есть <add key="UnobtrusiveJavaScriptEnabled" value="true" /> в моем файле web.config.

1 Ответ

0 голосов
/ 06 декабря 2018

Измените следующий код следующим образом:

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

Измените div, добавив идентификатор:

<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>

Чтобы добавить этот сценарий, он должен находиться в папке сценариев для вашего проекта.

Изменить контроллер так, чтобы вы загружали правильный частичный вид, еслиВы не указываете имя частичного представления, загруженное частичное представление будет тем, которое совпадает с именем действия, если частичное представление не соответствует имени действия, частичное представление не будет загружено.Поэтому явно укажите, какое частичное представление вы хотите загрузить следующим образом:

return PartialView ("_ RegisterAccount", модель)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...