我有一个小表单,用户必须填写并包含以下字段。
姓名(文字) 价值(文字) 组(组 - 是从数据库表中提取的选项列表)
现在这个视图的模型看起来像这样,
public string Name { get; set; }
public string Value { get; set; }
public int GroupID { get; set; }
现在视图已强烈输入上述模型。
使用什么方法填充下拉列表?由于数据不包含在模型中(可能包含在模型中)我们应该使用Temp / View数据吗? HTML助手?什么是实现这一目标的理想方式。
答案 0 :(得分:3)
我使用一个viewmodel用一个字典(我喜欢mvc contrib的选择框)包含所有属性,如:
class LeViewModel {
public string Name { get; set; }
public string Value { get; set; }
public int GroupID { get; set; }
public Dictionary<string, string> Groups {get; set;}
}
然后在你看来你只需要做
<%: Html.Select(m => m.GroupId).Options(Model.Groups) %>
希望它有所帮助。
答案 1 :(得分:2)
注意:这假设您使用的是MVC2。
如果我需要强类型下拉列表(在这种情况下是国家/地区列表),我在ViewModel上使用了2个属性。
public IEnumerable<SelectListItem> Countries { get; set; }
public int CountryID { get; set; }
我使用与此类似的代码在我的操作中将我的列表预转换为IEnumerable<SelectListItem>
。 (这假定具有名称和唯一ID的国家/地区类别)。
viewModel.Countries = Repository.ListAll().Select(c => new SelectListItem { Text = c.Name, Value = c.ID });
然后在我的强类型视图中,我使用:
<%= Html.DropDownListFor(model => model.CountryID, Model.Countries) %>
这很棒,因为当您回发到强类型操作(接收相同的视图模型)时,CountryID
将是所选国家/地区的ID。
另一个好处,如果他们有验证问题。您需要做的就是重新填充.Countries
列表,将viewmodel传递回视图,它将自动选择正确的值。
答案 2 :(得分:1)
我喜欢以下方法:有一个助手类为你做这件事,比如(伪):
class DropdownLogic {
public DropdownLogic(MyModel model) { /* blah */ }
public ListOfDropdownItems ToDropdown() {
/* do something with model and transform the items into items for the dropdownlist */
// f.e. set the item that matches model.GroupId already as selected
}
}
添加您的模型:
public DropdownLogic Groups { get; set; }
在你看来:
<%=Html.Dropdown(Model.Groups.ToDropdown())%>