Asp.net mvc 5 asp.net mvc 5.0下拉列表

Asp.net mvc 5 asp.net mvc 5.0下拉列表,asp.net-mvc-5,Asp.net Mvc 5,我添加了一个带有以下代码的控制器 TestDBEntities db=newtestdbentities(); 公共操作结果填充() { var data=来自数据库中的d。部门选择d; SelectList li=新的SelectList(数据,“DeptCode”、“DeptName”); ViewData[“部门”]=li; 返回视图(); } [HttpPost] 公共操作结果填充(FormCollection表单) { var str=表格[“部门”]; ViewBag.d=str;

我添加了一个带有以下代码的控制器

TestDBEntities db=newtestdbentities();
公共操作结果填充()
{
var data=来自数据库中的d。部门选择d;
SelectList li=新的SelectList(数据,“DeptCode”、“DeptName”);
ViewData[“部门”]=li;
返回视图();
}
[HttpPost]
公共操作结果填充(FormCollection表单)
{
var str=表格[“部门”];
ViewBag.d=str;
var data=来自数据库中的d。部门选择d;
SelectList li=新的SelectList(数据,“DeptCode”、“DeptName”、str);
ViewData[“部门”]=li;
返回视图();
}
还为上面的操作方法“填充”添加了一个视图,如下所示

@使用(Html.BeginForm(“填充”、“部门”、FormMethod.Post))
{ 
@DropDownList(“departments”,(SelectList)ViewData[“departments”],“selectdept”,new{@onchange=“this.form.submit();”)
@视图包.d

}
当我从dropdownlist中选择值时,它会显示所选的值。但不会保留下拉选择


请建议更正。另外,请让我知道如何有效地编写
HttpPost
方法。

您需要为属性指定绑定对象和
SelectList
不同的名称。您试图将所选值绑定到名为
departments
ViewData
属性,该属性的类型为
IEnumerable
,但
元素只能绑定到简单值(
int
string
等)

在内部,当您在POST方法中返回视图时发生的情况是

  • DropDownList()
    方法获取属性的值 绑定到,在您的情况下是“System.Meb.Mvc.SelectList”(
    .ToString()
    查看数据[“部门”]的值
  • 由于绑定到的属性的值不是
    null
    ,因此 新的
    IEnumerable
    是从您选择的 假如因为
    选择列表中的所有选项都不匹配
    
    “System.Meb.Mvc.SelectList”
    则选择的
    属性不可用
    设置为选择第一个选项,因为必须选择某些内容
  • 请注意,在
    SelectList
    构造函数中设置第四个参数会被
    DropDownList()
    (和
    DropDownListFor()
    )方法忽略,除非第一个参数的值为
    null

    要正确执行此操作,请首先创建视图模型,以表示要显示/编辑的内容,并将其强绑定到模型

    公共类MyModel
    {
    [必需(ErrorMessage=“请选择一个部门”)]
    公共字符串部门{get;set;}
    公共选择列表部门列表{get;set;}
    }
    
    关联的视图将是

    @model-MyModel
    @使用(Html.BeginForm())
    {
    @LabelFor(m=>m.Department)
    @Html.DropDownListFor(m=>m.Department,Model.DepartmentList,“选择部门”)
    @Html.ValidationMessageFor(m=>m.Department)
    }
    
    控制器的方法将是

    公共操作结果填充()
    {
    MyModel model=新的MyModel();
    配置视图模型(模型);
    返回视图(模型);
    }
    [HttpPost]
    公共操作结果填充(MyModel)
    {
    如果(!ModelState.IsValid)
    {
    配置视图模型(模型);
    返回视图(模型);
    }
    //保存并重定向。
    }
    私有void配置视图模型(MyModel模型)
    {
    model.DepartmentList=新选择列表(db.Depts,“DeptCode”,“DeptName”);
    }
    
    非常感谢您的回复。但我不想用简单的方式使用模型来做这个。什么?你想要多简单。不使用模型意味着什么?意味着不创建新的viewmodel类,即MyModel。也感谢您的解释。这对我帮助很大。