HTTP POST завершается ошибкой, когда представление имеет имя по умолчанию (настройка маршрута) - PullRequest
0 голосов
/ 07 января 2019

Пост просмотра не удается. Похоже, что имя действия пропущено.

enter image description here

Если я изменю имя действия POST в обоих контроллерах и просмотр на другое произвольное имя, это будет работать.

Контроллер

public class AuthenticationController : Controller
{
    // GET: Authentication
    [HttpGet]
    public ActionResult Index()
    {
        var model = new IndexViewModel();

        return View(model);
    }



    [HttpPost]
    public ActionResult Index(IndexViewModel model)
    {
        if (ModelState.IsValid)
        {
            if(Membership.ValidateUser(model.Username, model.Password))
            {
                return RedirectToAction("Index", "Default");
            }
            else
            {
                model.ErrorMessage = "Failed to login. Please try again!";
            }
        }

        return View(model);
    }
}

View

@model Test.Web.Models.Authentication.IndexViewModel
@{
    ViewBag.Title = "Log In";
}

<h2>Enter credentials to log on</h2>
@using (Html.BeginForm("Index", "Authentication"))
{
<p>
    @Html.LabelFor(x => x.Username)<br />
    @Html.TextBoxFor(x => x.Username)
</p>
<p>
    @Html.LabelFor(x => x.Password)<br />
    @Html.TextBoxFor(x => x.Password)
</p>
    <input type="submit" value="Log In" />
}

Я почти уверен, что причина в RouteConfig и имени действия по умолчанию.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

Одним из решений, конечно, является переименование действий GET и POST, а не использование Index, но есть ли способ заставить это работать так, как есть? Без какого-либо взлома, то есть.

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