'无法找到资源'在MVC中使用HttpPost

本文关键字:HttpPost MVC 资源 | 更新日期: 2023-09-27 18:15:47

我看到我的问题是一个常见的错误,并尝试了许多答案这个问题,但它仍然不适合我。因此,从头开始,我在MVC项目中有一个使用Html的部分表单。BeginForm助手:

<%using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new{@class = "form-class"}))

"MyAction"answers"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,所以它不是路由(?)。我的世界。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);
    }
}

正如我所说,我已经在其他帖子中尝试了其他答案,这些答案似乎对海报有效,但我仍然有一个问题。我错过了什么?

注:在View Source中,我看到表单标签如下:

<form method="post" action="690" id="form1">

当action应该指向MyAction时。如何设置Html。BeginForm指向'MyAction'?

'无法找到资源'在MVC中使用HttpPost

问题是动作的id参数是int(值类型),它不能作为空引用传递。因此,您需要在BeginForm调用中(在视图中)显式地将其设置为0,或者使其为空。

基本上,路由引擎不能根据你给它的数据(动作名称和控制器名称)+路由映射来解析你的动作和控制器。

示例(如果您决定保持参数为int):

<%using (Html.BeginForm("MyAction", "MyController", new { id = 0 }, FormMethod.Post, new { @class = "form-class" }))

此重载将匹配您在控制器中指定的签名。当你编辑时,只需替换0与任何模型属性匹配;例如:

<% using (Html.BeginForm("MyAction", "MyController", new { id=Model.ID }, FormMethod.Post, new{ @class = "form-class"})) %>