MVC3のソースコードをダウンロードするためのリンクは次のとおりです。探しているファイルはmvc3-rtm-sources\mvc3 \ src \ SystemWebMvc \ Mvc \ Html\SelectExtensions.csです。このファイルには、のDropDownListおよびDropDownListのすべての拡張メソッドが含まれています。
あなたが探しているのは、次のようなものです。
[SuppressMessage("Microsoft.Design", "CA1006:DoNotNestGenericTypesInMemberSignatures", Justification = "This is an appropriate nesting of generic types")]
public static MvcHtmlString DropDownListForRoles<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, UserRole role, IDictionary<string, object> htmlAttributes) {
if (role == 'X') {
//edit the select list as necessary
}
else if (role == 'Y') {
// have the single value
// add the read-only attribute to htmlAttributes
}
return DropDownListHelper(htmlHelper, expression, selectList, htmlAttributes);
}
それは少なくともあなたが探しているものの良い出発点になるはずです。詳細がなければ、私は本当にあなたに擬似コードを与えることができるだけです。ただし、そこから必要なものを微調整できるはずです。
すべての関数に対して持つさまざまなオーバーライドを確認することを忘れないでください。今は必要ないと思うかもしれませんが、後で何かが変更された場合に備えて、すべてのオプションがあることを知っておくと便利です。それらが持っているようにそれらを行い、それらのメソッドが作成したメソッドを返すようにし、可能なすべてのパラメーターを使用してメソッドを呼び出し、必要に応じてnull値を渡します。