1

我正在尝试使用 MS 教程 NerdDinner 中的代码来填充包含状态的下拉列表,包括已经存在的任何内容(用于编辑 ActionResult)。

以下是 NerdDinner 中用于电话国家/地区的内容:

//ViewData["Countries"] = new SelectList(PhoneValidator.AllCountries, dinner.Country);

我有所有的州,我只是添加了一些来测试。不适用于此助手:

public ActionResult Create()
{

    Operation operation = new Operation();

    ViewData["States"] = new SelectList(
        new List<SelectListItem>
        {           
             new SelectListItem{ Text="Ohio", Value="OH"},
            new SelectListItem{ Text="Oklahoma", Value="OK"},
            new SelectListItem { Text="Oregon", Value="OR"},
            new SelectListItem{ Text="Pennsylvania", Value="PA"},
            new SelectListItem{ Text="Rhode Island", Value="RI"}
        }, operation.State);


    return View(operation);

}

这是创建视图中的助手(与编辑视图相同):

@Html.DropDownList("States", ViewData["States"] as SelectList))
4

1 回答 1

3

你有很多问题。首先,您构建一个集合SelectListItem(这是所有DropDownList要求),然后尝试从中制作一个SelectList。除了毫无意义的额外开销之外,您没有指定dataValueFieldanddataTextField参数,因此您生成了很多看起来像的选项

<option>System.Web.Mvc.SelectListItem</option>

并且您尝试设置所选选项的第二个参数也将不起作用(除非operation.State是 typeof SelectListItem

其次,您不能对绑定到的属性和SelectList. 你SelectList应该被命名(说)StateList

最后,您实际上并没有绑定任何东西。您的模型包含一个名为 的属性State,而不是States。始终使用强类型的 html 助手。

你的代码应该是

public ActionResult Create()
{
    Operation operation = new Operation();
    ViewData["StateList"] = new List<SelectListItem>()
    {           
        new SelectListItem{ Text="Ohio", Value="OH"},
        new SelectListItem{ Text="Oklahoma", Value="OK"},
        ....
    };
    return View(operation);
}

并且在视图中

@Html.DropDownListFor(m => m.State, (IEnumerable<SelectListItem>)ViewData["StateList"])

在您的情况下,将选择第一个选项(“Ohio”),因为 的值与Statenull的一个选项不匹配。如果您要operation.State = "OR";在控制器中使用,则在您第一次渲染视图时将选择第三个选项(“Oregon”)。

于 2015-08-15T06:13:16.690 回答