2008-11-05 90 views
7

我需要在我的頁面上有一個允許用戶選擇其狀態的下拉列表。由於這可能是一個將在其他地方使用的控件,我認爲創建一個可以重用的MVC View用戶控件是一個好主意。ASP.NET MVC查看用戶控件 - 如何設置ID?

我想控制會是這個樣子:

<select name="" id=""> 
    <option value="AL">Alabama</option> 
    <option value="AK">Alaska</option> 
</select> 

而且在我看來,代碼將是這樣的:

<%= Html.RenderPartial("StateDropdownControl") %> 

我的問題是,什麼是設置的最佳方式控件上的名稱和ID?如果需要,我想確保在一個頁面上可以有多個此控件的實例。另外,我希望能夠發送默認情況下應該選擇的狀態。

我會用ViewData嗎?

回答

9

Corey正在對正確的解決方案。我認爲爲視圖聲明特定的模型對象會使視圖變得非常簡單,並且作爲附加功能使它們變得易於測試。

所以不是剛好路過ID爲對象的,你可能要創建自己的模型對象傳遞

它可能是這個樣子:

​​

顯然,不斷向你的模型添加你需要的東西,使你的觀點正確。

然後,你可以這樣調用它:

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", new StateDropDownPresentationModel { DropDownID = "MyID", SelectedState = "IL" } %> 

然後只是確保你把在檢查之類的ID是空/空(應該可能拋出一個錯誤)和SelectedState是空/空。

3

那麼你可以結合傳遞對象數據到的RenderPartial方法添加到用戶控件來呈現,所以你可以很容易地做到以下幾點:

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", "MyID") %> 

,並在用戶控件執行以下操作:

<select name="<%=ViewData.Model%>" id="<%=ViewData.Model%>"> 

.... 

只是可以肯定,一個更好的方法來處理它是做一個簡單的DTO(數據傳輸對象)認爲,Infor公司因此您可以將更多信息傳遞給用戶控件,這是您不可避免需要的。

例子:


class ComboData 
{ 
    string ID {get;set;} 
    string CssClass {get;set;} 
    //Other stuff here 
} 

<% 
var comboData = new ComboData {ID = "myID", CssClass = "comboStyle" } 

%> 

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", comboData) %> 
<select name="<%=ViewData.Model.ID%>" id="<%=ViewData.Model.ID%>" class="<%=ViewData.Model.CssClass%>"> 

.... 

確保您設置的代碼背後的用戶控件是一個通用型ComboData的這個例子。

1

查看Html.DropDownList幫助器方法。它有一些重載,允許您傳遞列表數據並設置選定的項目。最簡單的版本只是設置選擇的名稱。

<%= Html.DropDownList("SelectStates"); %> 

如果ViewData [「SelectStates」]中有一個MultiSelectList類型的值,那麼該列表將自動填充。