1

我使用 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

4

4 回答 4

0

SearchBag 在 html 中需要小写(searchBag 而不是 SearchBag)

于 2009-01-02T01:55:46.397 回答
0

虽然“SearchBag.FamilyCodes”是一个有效的 HTML id,但框架会尝试将每个表单项映射到同名的相应参数,并且参数名称中不能有句点。如果为控件分配一个单独的 ID(Html.DropDownList 方法的不同重载),它会通过吗?

于 2008-11-17T11:35:06.610 回答
0

我认为您需要将 FamilyCodes 的类型从 SelectList 更改为字符串。

public string FamilyCodes { get; set; }

然后在提交时 FamilyCodes 的值应该是从下拉列表中选择的值。我目前的项目中有几个,没有问题。

于 2009-01-02T17:40:09.787 回答
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"]);
于 2009-08-03T09:55:55.100 回答