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。也感谢您的解释。这对我帮助很大。