Как использовать PreventDefault в AspNetCore? - PullRequest
0 голосов
/ 05 октября 2018

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

Для этого я добавил следующую форму внутри модального окна.:

@model Demo.ViewModels.UserProfileViewModel;

<form asp-controller="User" asp-action="UpdateUser" asp-antiforgery="true" id="userInformations">
  <div class="form-group">
    <label class="col-lg-3 control-label">Email</label>
    <div class="col-lg-12">
        <input class="form-control" type="text" asp-for="User.Email" value="@Model.User.Email" />
    </div>
  <div class="form-group">
    <label class="col-lg-3 control-label">Password</label>
    <div class="col-lg-12">
        <input class="form-control" asp-for="User.??" type="password" value="?" />
    </div>
  </div>
  <button type="submit">Update</button>
</div>

, где UserViewModel - это объект, содержащий поля для обновления.

Для предотвращения модального закрытия я создал функцию javascript со следующим содержанием:

$('#userInformations').on("submit", function (event) {
  event.preventDefault();
  $.ajax({
        url: "some url",
        type: "POST",
        data: some data,
        success: function (result) {
            console.log(result)
        }
    });
});

Я застрял в части ajax, в частности мне нужно вызвать метод UpdateUser, доступный в контроллере User:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult UpdateUser(UserProfileViewModel updateUser)
    {
        if (ModelState.IsValid)
        {
            updateUser = _repo.UpdateUser(updateUser);
        }

        return RedirectToAction("Profile");
    }

Основная проблема: у меня естья понятия не имел, как это сделать, и я на самом деле не нашел ничего связанного, поэтому я не знаю, возможно ли это, или, возможно, ситуация более проста, чем эта.

ОБНОВЛЕНИЕ

Как предлагалось:

   $.ajax({
        url: this.action,
        type: "POST",
        data: this.serialize,
        success: function (result) {
            alert(true);
            console.log(result)
        },
        error: function (data) {
            console.log(data);
        }
    });

1 Ответ

0 голосов
/ 05 октября 2018

Все, что у вас есть, в порядке.Для URL просто используйте this.action.Для данных используйте this.serialize().

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