この質問は簡単なものです。ページに一連のリンクがあり、それらはすべて実際には同じコントローラー メソッドを指しています。それらの違いは、それぞれがそのメソッドに異なる値を渡すため、後続のプロセスがわずかに異なることです。たまたま、渡された可能な値に対応する列挙型がすでに定義されていたので、何も考えずに次のようにしました。
@Url.Action("QueryStepTwo", new { type = QueryType.UserRecords })
そして、何も赤い下線が引かれていないことに驚きました。コンパイルを押してそのページに移動して確認すると、CS0103 のエラー メッセージが表示されました。「名前 'QueryType' は現在のコンテキストに存在しません」。エディターでQueryType
は、構文が強調表示され、入力時に IntelliSense によってオプション リストが提供されます。
これは、VS/IntelliSense が少し賢すぎて、実際のページ解析/レンダリング エンジンではできないことを知っているだけの場合だと思いますか? 列挙型をその文字列または int 値にキャストしても役に立たないので、これは物事が実行される順序に関係していると推測しています。より具体的には、Razor がページを表示するまでに、列挙型は範囲外になります。このような URL ヘルパーで列挙型を使用する方法はありますか?特に、列挙型をビュー モデルのメンバーとして定義する必要がないものはありますか? あちこちで魔法の糸を使うのは嫌いです。タイプミスやばかげたことに対して脆弱すぎます。