MVC 5: кнопка «Отправить», нажимающая неверное действие в контроллере - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть форма, которая при нажатии на кнопку отправки переходит к действию в контроллере. Это отлично работает. Действие возвращает представление с моделью представления:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "Title,Name,Surname,Email,ContactNumber")]ClientViewModel clientViewModel)
    {
        *some actions*
        return View("SaveClient", matchesClientViewModel);
    }

SaveClient.cshtm:

@model BusinessModels.MatchesClientViewModel
@{
    ViewBag.Title = "SaveClient";
}

<h2>SaveClient</h2>

<h3>
bla bla
</h3>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()


    WebGrid grid = new WebGrid(Model.ClientMatches);
    @grid.GetHtml(columns: new[]

                         {
                    grid.Column("Name"),
                    grid.Column("Surname"),
                    grid.Column("Email"),
                })


    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>

}

И в моем контроллере у меня есть следующее действие:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult SaveClient(MatchesClientViewModel matchesClientViewModel)
    {
        *some actions*
        return View();
    }

Тем не менее, кнопка «Отправить» действует не на действие SaveClient, а на действие «Создать». При проверке формы в IE я вижу, что форма переходит к действию / Client / Create.

Я попытался заменить

@ using (Html.BeginForm ()) с но это не работает.

Мой конфиг маршрута:

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

Есть идеи, что я здесь не так делаю? Пожалуйста, помогите, я занимаюсь этим уже 2 дня.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вы можете добавить onclick="location.href='@Url.Action("Action", "Controller")'" к элементу input. В вашем случае "Action" (имя метода Action) будет "SaveClient", а "Controller" (имя контроллера) будет "Client":

<input type="submit" value="Save" class="btn btn-default" onclick="location.href='@Url.Action("SaveClient", "Client")'" />
0 голосов
/ 30 апреля 2018

Есть некоторые вещи, управляемые соглашением в среде MVC. Так что вам нужно явно указать действие и имя контроллера, чтобы опубликовать его в собственном определенном имени действия, которое отличается от обычного:

@using (Html.BeginForm("SaveClient","ActionName",FormMethod.Post))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...