ASP.NET MVC で URL 内のコントローラー名を 2 回取得する

ASP.NET MVC で URL 内のコントローラー名を 2 回取得する

初心者のような質問で申し訳ありませんが、ご覧のとおり、コントローラー名は URL に 2 回表示されており、URL に 2 回表示されている場合にのみ機能します。 メールアドレス

私のコントローラーは次のようになります: コントローラーアクション

そしてこれが私の見解です:

ビュー

別のビューを作成するとルーティングは正常に機能するので、これはルーティングの問題ではないと分かります。次のように入力するだけでhttp://localhost:50903/ユーザーすると、空白の画面が表示されます。try-catch ブロックが原因で null が返されていると思いますが、関数を呼び出すと、UserDao では次のようになります。

ユーザー.Dao

そして、これが呼び出されるストアド プロシージャです。

ストアドプロシージャ

助けてください、気が狂いそうです

答え1

アプリケーションにエリアを作成しましたか?エリアを作成し、その中にユーザーコントローラーフォルダーを配置すると、コントローラー名が2回取得される可能性があります。また、URLを見ると、最初のコントローラー名がユーザー一般的にエリアを作成するときはほとんどの場合小文字で名前を付けるため、小文字になっています。

次に示すように、URL にエリア名が含まれているため、ユーザー コントローラー名が URL に 2 回表示されます。

routes.MapRoute(
      name: "user_route",
      template: "{area:required}/{controller:required}/{action}/{id?}",
      defaults: new { area = "users", controller = "Users" 
      });

ルートからエリアを削除します。

routes.MapRoute(
      name: "user_route",
      template: "{controller:required}/{action}/{id?}",
      defaults: new { controller = "Users", action = "Index" 
      });

これにより、コントローラー名は URL に 1 回だけ表示されます。

注記: これは、アプリケーション内に領域を作成した場合にのみ役立ちます。領域を作成していない場合は、お知らせください。別の解決策を見つけます。

これがお役に立てば幸いです。
ありがとうございます。

答え2

何が問題なのかが分かりました。コントローラーが正しく動作するためには、コントローラーの名前を変更する必要がありました。コントローラー名がビューの名前と同じだったため、アプリケーションが混乱していた可能性があります。

関連情報