Razor 如何在控制器创建操作中使用状态填充SelectList
我试图使用MS tutorial NerdDinner中的代码来填充一个包含状态的下拉列表,包括任何已经存在的状态(用于编辑ActionResult) 以下是NerdDinner电话国家/地区使用的内容:Razor 如何在控制器创建操作中使用状态填充SelectList,razor,html-helper,selectlist,selectlistitem,Razor,Html Helper,Selectlist,Selectlistitem,我试图使用MS tutorial NerdDinner中的代码来填充一个包含状态的下拉列表,包括任何已经存在的状态(用于编辑ActionResult) 以下是NerdDinner电话国家/地区使用的内容: //ViewData["Countries"] = new SelectList(PhoneValidator.AllCountries, dinner.Country); 我有所有的州,我只是增加了一些测试。不适用于此帮助程序: public ActionResult Create() {
//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);
}
你有很多问题。首先,您构建一个
SelectListItem
(这是DropDownList
所需的全部内容)的集合,然后尝试从中创建一个SelectList
。除了无意义的额外开销之外,您还没有指定dataValueField
和dataTextField
参数,因此您生成了大量的选项
<option>System.Web.Mvc.SelectListItem</option>
在我看来
@Html.DropDownListFor(m => m.State, (IEnumerable<SelectListItem>)ViewData["StateList"])
@Html.DropDownListFor(m=>m.State,(IEnumerable)ViewData[“StateList”])
在您的情况下,将选择第一个选项(“Ohio”),因为
State
的值为null
,并且与您的选项之一不匹配。如果要使用operation.State=“或”代码>在控制器中,然后在第一次渲染视图时选择第三个选项(“俄勒冈州”)。嘿,非常感谢。我把这个:new-SelectListItem{Text=”“,Value=”“}放在项目的顶部,这样就不会选择任何内容。希望这就是解决问题的方法。另外,我不知道在控制器中放在哪里,如何设置所选的项目。对于Create视图,它可能会像您提到的那样硬编码为“或”,但在编辑屏幕上,它会使用operation.State列中的值。但是,我会回答这个问题。不,如果您想要一个“默认”(null
)项,请使用Html.DropDownListFor(m=>m.State,(IEnumerable)ViewData[“StateList”],“-请选择-”
-3个参数添加-请选择-
,如果选择该参数,将发回null
(如果您有[必需的]状态上的
属性
将在创建视图中导致验证错误,您不会设置状态的值
,以便“-请选择--”将选择选项。对于编辑视图,如果您使用EF填充模型,则将已设置状态的值,因此您无需执行任何操作。如果仍然存在问题,请发布显示编辑()的新问题
method。好的,您的列表帮助程序在“编辑”视图中工作,以返回保存在表的“状态”列中的正确值。如果我取消选择下拉列表,则会出现其他错误,但我认为这对于另一个问题来说已经足够了。再次感谢。因此,我使其工作正常,但出现了一个错误……我将此…@Html.DropDownListFor(model=>model.State,(IEnumerable)ViewData[“StateList”],“-请选择-”…当我尝试在未选择任何内容的情况下保存时,出现此错误(“-请选择-”)…System.InvalidOperationException:没有具有键“State”的“IEnumerable”类型的ViewData项。
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"])