0

我的观点:

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

4

1 回答 1

1

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

于 2012-05-08T09:19:02.503 回答