2011-06-16 16 views
9

Iは、エリア内のコントローラはなぜHtml.BeginFormは空のアクションを生成しますか?

public class SiteVisitController : Controller 
{ 
    public ViewResult ReadyForCompletion() { ... } 

    public ViewResult CompleteAndExport() { ... } 
} 
Admin

と同じクラスの異なるコントローラのアクションに戻ってポストを有するビュー(ReadyForCompletion.cshtml)と呼ば有する

@using (Html.BeginForm("CompleteAndExport", "SiteVisit")) 
{   
    <input type="submit" value="Complete &amp; Export" /> 
} 

このフォームの生成されたHTML私は、これはABを持っている理由を知りたい

<form action="" method="post"> <input type="submit" value="Complete &amp; Export" /> 

</form> 

:空白のアクションを持っていますほんとうの行為?は、詳細情報については、私はまた、空の文字列をプリントアウトし

@Url.RouteUrl(new { controller = "ReadyForCompletion", action = "SiteVisit", area = "Admin" }) 

に追加しました。また、空のHtml.BeginForm()を使用すると、正しいアクションが生成されます。

登録ルート私はあなたの問題は、連続するオプションのパラメータを持つことによって引き起こされると考えてい

 context.MapRoute(
      "Admin_manyParams", 
      "Admin/{controller}/{action}/{id}/{actionId}", 
      new { action = "Index", id = UrlParameter.Optional, actionId = UrlParameter.Optional } 
     ); 
+0

登録したルートを表示できますか? –

+0

私は登録されたルートを追加しましたが、 'Html.BeginForm()'を正常に実行できるので、なぜそれが問題になるのか混乱します。 – kelloti

答えて

10

です。 2つのオプションパラメータを含むようにルートを変更するまでは、問題を再現できませんでした。

参照:ソリューションは若干異なるものの、根本的な原因は、同じであるASP.NETコアを使用してこの問題に遭遇したあなたのそれらのためにThis article which explains the problem

+0

そうです、ありがとうございます。クレイジー! – kelloti

0

.MapRoutes()を呼び出すときに複数のデフォルト値を使用してコアで最初にこれを確認しました。例えば。

routes.MapRoute(
    name: "default", 
    template: "{controller=Foo}/{action=Bar}/{id?}" 
); 

YMMV:

routes.MapRoute(
    name: "default", 
    template: "{controller}/{action}/{id?}", 
    defaults: new { controller = "Foo", action = "Bar" } 
); 

この問題を回避するには、文字列のテンプレートにデフォルト値を配置することです。

関連する問題