2013-01-18 34 views
0

我正在探索一個通用的解決方案,與Asp.net MVC中的DropDownBox相關的登錄用戶角色。以下是該場景:Html.DropDownListFor擴展方法來填充基於用戶角色的值ASP.NET MVC3

如果UserRole爲X,則網頁上的DropDownA必須具有多個值。

如果UserRole爲Y,則網頁A上的下拉菜單必須具有單個值,並且下拉菜單必須爲ReadONLY默認值爲單個值。

值將由控制器通過ViewBag提供給視圖

有人可以幫我了此方案的擴展方法是什麼?

+0

值將由控制器通過ViewBag提供給視圖。 – ASPMVC

回答

0

Here是下載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值。

+0

真棒謝謝你,這有助於。感謝您指點我下載MVC3源代碼。 – ASPMVC

+0

不客氣。當我發現微軟提供了它的源代碼時,我感到很驚訝。 – krillgar

+0

另一件需要注意的事情是,如果你是MVC的新手,就要警惕@ Html.Label。這與其他HTML幫助器方法的行爲不同。看看我對這個問題的回答[這裏](http://stackoverflow.com/questions/4541974/html-label-wont-allow-string-concatination/12477516#12477516)關於它是怎麼回事。我最終創造了一系列幫助Span解決這個問題的輔助方法。 – krillgar