それで、私のクールな新しいASP.NETMVCアプリケーション用に次の2つのルートが定義されているとしましょう。
{controller}/{action}/{id}
{controller}/{action}/{page}
最後に名前が付けられたセグメントを除いて、両方のルートはまったく同じパターンを持っています。また、最後に名前が付けられたセグメントもオプションです。これは例では明確ではありませんが、オプションと見なしてください。
リストした順序でルートをフレームワークに追加するとRouteCollection
、最初のルートは常に次のようなURLに一致します。/Home/Index/1
通常、これは問題ではありませんが、ASP.NET MVCのデフォルトのモデルバインダーは、引数をパラメーターとしてアクションに渡す場合、アクションのパラメーターがルートパターンの名前付きセグメントと同じ名前である必要があります。
したがって、たとえば、ビューに渡すモデルのリストをプルして、パラメーターとしてページ番号を受け入れるアクションList
の場合、そのパラメーターIDに名前を付ける必要があります。繰り返しますが、通常、それは問題ではありませんが、私は詳細な人であり、パラメーターが何に使用されるかを示すためにパラメーター名が好きです。
しかし、モデルバインダーがルーティングシステムの後に起動するので、私は運が悪いです。それとも私ですか?私自身のモデルバインダー、さらに悪いことに、私自身のルーターを書かずにこれを回避する方法はありますか?
さらに、これは2番目の関連する質問と見なすことができますが、名前付きセグメントのルーティングがリファクタリングで安全であることを確認するにはどうすればよいですか?
Url.Action
たとえば、私の見解では、ルートを考慮しているため、を使用することをお勧めします。ただし、このメソッドを使用してURLを生成するときに引数を渡すには、通常、名前が名前付きセグメントと同じであるプロパティを持つ匿名オブジェクトを渡す必要があります。
したがって、ルート内の名前付きセグメントの名前を変更する場合は、文字通りすべてのビューに移動して、そのプロパティの名前も変更する必要があります。それは最適に聞こえません。では、これを回避するためのクリーンな方法は何ですか?