2011-01-26 46 views
2

我正尝试使用Html.BeginRouteForm为ASP.NET MVC应用中的表单生成动作。我所针对的路线是:Html.BeginRouteForm不会为指定的路由生成URL

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

单元测试和跟踪应用程序中的路线是成功的。现在,我想创建一个HTML表单,其路径是它的网址:

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

这会生成一个带有空白操作属性的HTML表单。谷歌搜索,似乎这是应该工作。这是一个“新”的观点,因此目前(即回传)路线是

projects/1/mapconfigs/new 

而且我希望它发布到

projects/1/mapconfigs 

这是形式的行动应该是什么。

我可以手动使这一切发生,如果我不使用助手,但是然后我失去了客户端的很好的自动验证的东西。

那么,我在做什么错误的任何想法?希望我很清楚自己想要做什么。

回答

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> 
+0

是啊,但现在,如果我发布形式路线不delete操作到X-HTTP-Method-Override设置为DELETE,这是我的自定义约束所做的。所以,我不得不在BeginRouteForm的RouteValueDictionary中添加'httpMethod'属性来使其工作。感谢您让我走上正轨! – Ruprict 2011-01-27 16:46:49

相关问题