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