Html.BeginRouteForm不会为命名路由生成URL

时间:2011-01-26 21:18:34

标签: c# asp.net-mvc-3 asp.net-mvc-routing

我正在尝试使用Html.BeginRouteForm为我的ASP.NET MVC应用程序中的表单生成操作。我定位的路线是:

//CREATE
routes.MapRoute("map-config-post", "projects/{projectId}/mapconfigs",
    new { controller = controllerName, action = "Create" },
    new { httpMethod = new RestfulHttpMethodConstraint("POST") });

单元测试并在应用中跟踪路线成功。现在,我想用这条路线创建一个HTML表单,就是它的URL:

@using (Html.BeginRouteForm("map-config-post", new { projectId = Model.Project.Id }))
{ 
    //form stuff
}

这会产生一个带有空白操作属性的HTML表单。谷歌搜索,似乎这应该工作。这是一个“新”视图,因此当前(即回发)路径是

projects/1/mapconfigs/new

我希望它发布到

projects/1/mapconfigs

表单操作应该是什么。

如果我不使用帮助程序,我可以手动完成这一切,但后来我在客户端失去了很好的自动验证功能。

那么,我做错了什么想法?希望我很清楚我想要做什么。

1 个答案:

答案 0 :(得分:2)

问题似乎来自您的自定义RestfulHttpMethodConstraint约束。使用default one完全正常:

routes.MapRoute(
    "map-config-post",
    "projects/{projectId}/mapconfigs",
    new { controller = "Home", action = "Create" },
    new { httpMethod = new HttpMethodConstraint("POST") }
);

然后:

@using (Html.BeginRouteForm("map-config-post", new { projectId = Model.Project.Id }))
{ 
}

产生

<form action="/projects/123/mapconfigs" method="post">

</form>