0

ログインしたユーザーの役割に関して、Asp.netMVCのDropDownBoxに関連する一般的なソリューションを検討しています。シナリオは次のとおりです。

UserRoleがXの場合、webpageAのDropDownには複数の値が必要です。

UserRoleがYの場合、webpageAのドロップダウンは単一の値である必要があり、ドロップダウンはデフォルトで単一の値になっているReadONLYである必要があります。

値は、ビューにViewBagを介してコントローラーによって提供されます

誰かがこのシナリオの拡張方法を手伝ってくれますか?

4

1 に答える 1

0

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値を渡します。

于 2013-01-18T20:36:22.097 に答える