我可能在这里遗漏了一些东西,但在 ASP.NET MVC 4 中,我无法让以下工作。
给定以下控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(string order1, string order2)
{
return null;
}
}
它的观点:
@{
ViewBag.Title = "Home";
}
@using (Html.BeginForm())
{
@Html.TextBox("order1")<br />
@Html.TextBox("order2")
<input type="submit" value="Save"/>
}
启动应用程序时,我得到的只是:
当前对控制器类型“HomeController”的操作“Index”的请求在以下操作方法之间不明确: System.Web.Mvc.ActionResult Index() on type ViewData.Controllers.HomeController System.Web.Mvc.ActionResult Index(System. String, System.String) 在 ViewData.Controllers.HomeController 类型上
现在,在 ASP.NET MVC 3 中,上述工作正常,我刚刚尝试过,那么在 ASP.NET MVC 4 中发生了什么改变来打破这个?
好的,我可能在这里做一些愚蠢的事情,而没有注意到它。
编辑:
我注意到在 MVC 4 应用程序中,Global.asax.cs 文件不包含以下内容:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
默认情况下,MVC 3 应用程序会执行此操作。所以我将上述内容添加到 MVC 4 应用程序中,但它失败并出现同样的错误。请注意,MVC 3 应用程序确实适用于上述路线。我通过 Request.Form 传递“订单”数据。
编辑:在RouteConfig.cs
我可以看到的文件RegisterRoutes
中执行,具有以下默认路由:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
我仍然得到原始错误,关于Index()
调用哪个方法之间的歧义。