2016-07-18 6 views
1

MVCを使用してASP.NET COREを使用しています。 「プロフィール」と呼ばれるAreaの設定があり、UserControllerにはEditというアクションがあります。私はここに新しい地面を壊しているとは思わない。フォームタグヘルパーは、レンダリングされたフォームアクションをどのように決定しますか?

私はこのURLになった場合:

/Profile/User/Edit/100

そして、私はこのようになりますビューがあります。

<form method="post" role="form" asp-controller="User" asp-action="Edit">

なぜHTMLは次のようにレンダリングさん:

<form method="post" role="form" action="/Profile/User/Edit">

の代わりに、この(「/ 100」の注記):

<form method="post" role="form" action="/Profile/User/Edit/100">

私はFORMタグヘルパーのステップを左右あるいはそれを回避することができます実現しますが、これはただ働き "すべきであるようにそれはそう。

これが私のルートが、現在設定されているかされていますルートをご注文の際

 app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "areaRoute", 
       template: "{area:exists}/{controller=Home}/{action=Index}"); 

      routes.MapRoute(
        name: "default", 
        template: "{area:exists=Home}/{controller=Home}/{action=Index}/{id?}"); 
     }); 
+0

実行中のASP.NETコアのバージョンは?動作は、ルートの設定方法によって異なります。彼らの姿を分かち合うことができますか? –

答えて

1

、セグメントのより少ない数を持つルートの前のセグメント数の多いルートを置くようにしてください。また、なぜ上記の2つの類似したルートが必要ですか?

以下のようなルートを変更してみることはできますか?

app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "areaRoute", 
      template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); 

     routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
    }); 
+0

これはそれでした!私はルートがリクエストをルーティングしただけだと思ったが、それ以上のことはないと思う。ご協力ありがとうございました。 –

+0

ええ、彼らはリンクの生成にも使用されます。また、リンクを生成するとき、MVCは現在のリクエストコンテキストに存在するルートデータを使用しようとし、ルートリストをトップダウンしてどのルートに一致するかを確認します。 –

関連する問題