从MultiSelectList返回文本和值

时间:2012-05-08 09:00:40

标签: asp.net-mvc-3 multi-select

我的观点:

    <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的内容,直到我到达控制器?

1 个答案:

答案 0 :(得分:1)

Html.ListBoxFor助手会使用<select>属性呈现multiple元素。在HTML中,当您将此标记放在表单中并提交表单时,只会将选定的值发送到服务器。这就是HTML的工作原理。如果你想发送文本,你将不得不使用JavaScript。例如,您可以订阅select元素的change事件,然后在表单中保留一个隐藏字段,该字段将使用所选文本列表进行更新。但老实说,不要这样做。在您的POST控制器操作中,只需从您在GET操作中获取它们的相同位置获取文本,以便最初显示该表单。