Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Razor 如何在控制器创建操作中使用状态填充SelectList_Razor_Html Helper_Selectlist_Selectlistitem - Fatal编程技术网

Razor 如何在控制器创建操作中使用状态填充SelectList

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() {

我试图使用MS tutorial 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);

}

你有很多问题。首先,您构建一个
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"])