2011-01-26 20 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フォームを作成したいと思います。URL:

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

この結果、空白のアクション属性を持つHTMLフォームになります。周りをグーグルで調べると、これはうまくいくと思われます。これは、「新」ビューであるので、現在の(すなわち、ポストバック)ルートは

projects/1/mapconfigs/new 

であり、私はそれが

フォームアクションがどうあるべきかである
projects/1/mapconfigs 

に投稿したいです。

私はヘルパーを使用しないと手動でこれを行うことができますが、クライアント側で素晴らしい自動検証機能が失われます。

私が間違っていることは何ですか?うまくいけば、私が何をしようとしているのかは明らかです。

答えて

2

問題はカスタムRestfulHttpMethodConstraintという制約から発生しているようです。その後、

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

と::完全に罰金default one作品を使用して

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

</form> 
+0

うんを、私はフォームを投稿する場合は、今では削除アクションにルーティングされない:

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

が発生X-HTTP-Method-OverrideをDELETEに設定してください。これは私のカスタム制約が行うものです。そこで、BeginRouteFormのRouteValueDictionaryに 'httpMethod'属性を追加して動作させる必要がありました。私を正しい軌道に乗せてくれてありがとう! – Ruprict

関連する問題