我看到我的问题是一个常见的错误,并尝试了许多解决方案,但对于我来说仍然不起作用。因此,从头开始说起,我在一个MVC项目中使用Html.BeginForm助手创建了一个部分表单:
<%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);
}
}
正如我所说,我尝试了其他帖子中的其他答案,这些答案似乎适用于发布者,但我仍然遇到问题。我错过了什么吗?
附言:在查看源代码时,我看到表单标签如下:
<form method="post" action="690" id="form1">
当操作应指向MyAction时。我如何设置Html.BeginForm以指向“ MyAction”?