我正在探索一個通用的解決方案,與Asp.net MVC中的DropDownBox相關的登錄用戶角色。以下是該場景:Html.DropDownListFor擴展方法來填充基於用戶角色的值ASP.NET MVC3
如果UserRole爲X,則網頁上的DropDownA必須具有多個值。
如果UserRole爲Y,則網頁A上的下拉菜單必須具有單個值,並且下拉菜單必須爲ReadONLY默認值爲單個值。
值將由控制器通過ViewBag提供給視圖
有人可以幫我了此方案的擴展方法是什麼?
我正在探索一個通用的解決方案,與Asp.net MVC中的DropDownBox相關的登錄用戶角色。以下是該場景:Html.DropDownListFor擴展方法來填充基於用戶角色的值ASP.NET MVC3
如果UserRole爲X,則網頁上的DropDownA必須具有多個值。
如果UserRole爲Y,則網頁A上的下拉菜單必須具有單個值,並且下拉菜單必須爲ReadONLY默認值爲單個值。
值將由控制器通過ViewBag提供給視圖
有人可以幫我了此方案的擴展方法是什麼?
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值。
真棒謝謝你,這有助於。感謝您指點我下載MVC3源代碼。 – ASPMVC
不客氣。當我發現微軟提供了它的源代碼時,我感到很驚訝。 – krillgar
另一件需要注意的事情是,如果你是MVC的新手,就要警惕@ Html.Label。這與其他HTML幫助器方法的行爲不同。看看我對這個問題的回答[這裏](http://stackoverflow.com/questions/4541974/html-label-wont-allow-string-concatination/12477516#12477516)關於它是怎麼回事。我最終創造了一系列幫助Span解決這個問題的輔助方法。 – krillgar
值將由控制器通過ViewBag提供給視圖。 – ASPMVC