我发现我的问题是一个常见错误,并且已经尝试了很多解决这个问题的方法,但它仍然不适合我。所以,从头开始,我在一个使用 Html.BeginForm 助手的 MVC 项目中有一个部分表单:
<%using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new{@class = "form-class"}))
“MyAction”和“MyController”不是实际名称,但它们在带下划线的名称确认时被解析。我在控制器中的操作是:
[HttpPost]
public ActionResult MyAction(int id, FormCollection form)
{
EditedData dt = new EditedData();
// does some db submits and returns edited data
return View(dt);
}
所以,看起来常见的问题是,使用 [HttpPost] 返回错误“找不到资源”。我已经用 [HttpPost] 进行了调试,注释掉了哪个命中 MyAction,所以它不是路由(?)。我的 global.asax没有改变:
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
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
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
正如我所说,我在其他帖子中尝试了其他答案,这似乎适用于海报,但我仍然遇到问题。我错过了什么?
PS 在查看源代码中,我看到表单标签显示:
<form method="post" action="690" id="form1">
当 action 应该指向 MyAction。如何将 Html.BeginForm 设置为指向“MyAction”?