2012-05-08 46 views
0

返回文本和值我的觀點: 從MultiSelectList

<div class="editor-label"> 
     @Html.LabelFor(model => model.UserList) 
    </div> 
    <div class="editor-field"> 
     @Html.ListBoxFor(model => model.SelectedUsers, new MultiSelectList(Model.UserList, "Key", "Value", Model.SelectedUsers)) 
     @Html.ValidationMessageFor(model => model.UserList) 
    </div> 

我的視圖模型:

public class UserListViewModel 
{ 
    public UserListViewModel() : 
     this(new List<KeyValuePair<string, string>>()) 
    { 

    } 

    public UserListViewModel(IList<KeyValuePair<string, string>> userList) 
    { 
     this.UserList = userList; 
     SelectedUsers = new List<string>(); 
    }  

    public IList<KeyValuePair<string,string>> UserList { get; set; } 
    public IList<string> SelectedUsers { get; set; } 
} 

因爲它是現在我只得到選擇的值,當我到達控制器我的UserList是空的,所以我不能再比較。有什麼辦法可以從MultiSelectList中返回值和文本,或者至少記住我的UserList的內容,直到我到達控制器?

回答

0

Html.ListBoxFor幫手呈現<select>元素與multiple屬性。在HTML中,當您將此標記放入表單並提交表單時,只會將所選值發送到服務器。這就是HTML的工作原理。如果你想發送文本,你將不得不使用JavaScript。例如,您可以訂閱select元素的change事件,然後在表單中保留一個隱藏字段,該字段將使用所選文本的列表進行更新。但老實說,不要那樣做。在您的POST控制器操作中,只需從您在GET操作中獲取它們的相同位置獲取文本以最初顯示錶單。

+0

好吧,但如果我想「記住」我的UserList的內容?有沒有辦法堅持它的狀態? – Janspeed

+0

如果要將其保留在客戶端上,您可以使用隱藏字段(一種模仿ASP.NET MVC中不再存在的經典WebForms ViewState) - 如果您不關心用戶篡改,請使用此選項這個數據。或者如果列表是用戶特定的,則使用會話。或者在應用程序範圍內使用緩存。但正如我所說,不要使用任何這些。只需在需要時從列表中存儲的任何地方獲取它。這樣你就不需要堅持任何東西。 –