Пост просмотра не удается. Похоже, что имя действия пропущено.
![enter image description here](https://i.stack.imgur.com/LIQHD.png)
Если я изменю имя действия 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, но есть ли способ заставить это работать так, как есть? Без какого-либо взлома, то есть.