我使用Html.DropDownList(String NameSelectListInViewData)方法创建一个DropDown。 这将生成具有正确值的有效Select输入。一切都很好。
然而,在提交时,源SelectList中的值未绑定。
案例: ViewData.SearchBag.FamilyCodes:
public SelectList FamilyCodes { get; set; }
生成下拉列表的Html:
<%=Html.DropDownList("SearchBag.FamilyCodes")%>
生成的html:
<select id="SearchBag.FamilyCodes" name="SearchBag.FamilyCodes">
<option value=" ">Any</option>
<option value="A">BLUE</option>
<option value="B">BLACK</option>
<option value="C">BEIGE</option>
<option value="G">GREEN</option>
<option value="O">ORANGE</option>
<option value="P">PURPLE</option>
<option value="R">RED</option>
<option value="S">GRAY</option>
<option value="U">BROWN</option>
<option value="W">WHITE</option>
<option value="Y">YELLOW</option>
</select>
在我的控制器中,我有一个带参数searchBag的动作。
public ActionResult AdvancedSearch(SearchBag searchBag) {
//Do Stuff with parameters in searchBag
return View("AdvancedSearch", searchViewData);
}
所有其他字段绑定都很好,只有选择框没有。 有什么想法吗?
更新
对于未来的读者来说,阅读这篇博文可能是值得的:http://haacked.com/archive/0001/01/01/model-binding-to-a-list.aspx
答案 0 :(得分:0)
虽然“SearchBag.FamilyCodes”是有效的HTML ID,但框架将尝试将每个表单项映射到相同名称的相应参数,并且您不能在参数名称中包含句点。如果为控件分配一个单独的ID(Html.DropDownList方法的不同重载),它是否会通过?
答案 1 :(得分:0)
SearchBag需要在html(searchBag而不是SearchBag)中小写
答案 2 :(得分:0)
我认为您需要将FamilyCodes的类型从SelectList更改为string。
public string FamilyCodes { get; set; }
然后在提交时,FamilyCodes的值应该是从下拉列表中选择的值。我目前的项目中有几个没有问题。
答案 3 :(得分:0)
昨天和选择列表有类似的问题,列表会生成正常,只是在UpdateModel上 - 会失败= - 没有绑定?
我在参数列表中找到答案......
SelectList (
Collection - items to use in the drop down,
ValueField - ie the primarykey as a String,
NameField - ie the name of the thing as a String,
SelectedValue - which is the passed in current objects FK relationship)
所以对我来说......
Country = new SelectList(db.Countries,“pkCountry”,“CountryName”,address.fkCountry);
我使用ViewModel方法 - 并在视图模型的构造函数中使用它...
public AddressCountryViewModel(){
public SelectList Countrys {get; private set;}
public AddressCountryViewModel(Address address)
{
Countrys = new SelectList(db.Countries, "pkCountry", "CountryName",address.fkCountry);
}
然后我抓住控制器中的值编辑操作并分配回正在更新的对象...
address.fkCountry = Convert.ToInt32(collection["fkCountry"]);