asp.net-mvc – 使用Entity Framework 6和ViewModel从数据库表填
发布时间:2020-12-16 07:20:42 所属栏目:asp.Net 来源:网络整理
导读:对于我可以使用ajax / jquery和存储过程快速完成的问题,我一直在摸不着头脑.我想要 1)使用Entity Framework和视图模型从数据库表中获取的值填充下拉列表.我不想使用VIEWBAG或VIEWDATA.任何帮助赞赏. 2)如何使用具有所有默认字段的视图模型生成创建视图?脚手
对于我可以使用ajax /
jquery和存储过程快速完成的问题,我一直在摸不着头脑.我想要
1)使用Entity Framework和视图模型从数据库表中获取的值填充下拉列表.我不想使用VIEWBAG或VIEWDATA.任何帮助赞赏. 2)如何使用具有所有默认字段的视图模型生成创建视图?脚手架适用于模型,但不适用于视图模型? 我的模特 public class Employee { public int EmployeeID { get; set; } public string Name { get; set; } public string Gender { get; set; } public string City { get; set; } public string Level { get; set; } public int DepartmentId { get; set; } } public class Grade { public int ID { get; set; } public string Level { get; set; } } 查看模型 public class GradeSelectListViewModel { public Employee Employee { get; set; } public IEnumerable<SelectListItem> Grades { get; set; } public GradeSelectListViewModel(Employee employee,IEnumerable grades) { Employee = employee; Grades = new SelectList(grades,"Grade","Name",employee.Level); } } 我的上下文课程 public class EmployeeContext : DbContext { public DbSet<Employee> Employees { get; set; } public DbSet<Department> Departments { get; set; } public DbSet<Grade> Grades { get; set; } } 我的控制器 public ActionResult Edit (int? id) { using (var db = new EmployeeContext()) { var model = new GradeSelectListViewModel(db.Employees.Find(id),db.Grades); //model.Employee = db.Employees.Single(x => x.EmployeeID == id); model.Grades = db.Grades.ToList().Select(x => new SelectListItem { Value = x.ID.ToString(),Text = x.Level }); return View(model); } } 我的RAZOR PAGE CSHTML @model MVCDemo.ViewModels.GradeSelectListViewModel .... @using (Html.BeginForm()) { @Html.AntiForgeryToken() .... @Html.DropDownListFor(x => Model.Employee.Level,new SelectList(Model.Grades,"ID","Level"),"Select Level") .... <input type="submit" value="Create" class="btn btn-default" /> } 解决方法
主要问题是在视图中你有新的SelectList(Model.Grades,“ID”,“Level”),但是Grades是IEnumerable< SelectListItem>和SelectListItem不包含名为ID和Level的属性.
但是,您的代码还存在一些其他问题.首先,视图模型不应包含数据模型,而应该是视图模型 public class GradeSelectListViewModel { public int? ID { get; set; } // make this ID so you do not need an input for it public string Name { get; set; } .... // other properties of Employee that your editing [Required(ErrorMessage = "..")] public int? Level { get; set; } // make value types nullable to protect against under-posting attacks public IEnumerable<SelectListItem> Grades { get; set; } } 并根据需要添加显示和验证属性.请注意,我删除了构造函数(您似乎没有使用它,但是如果您这样做了,那么您还需要包含一个无参数构造函数,否则在提交POST方法时会抛出异常.我还假设因为你绑定到Grade的int ID属性,所以Level应该是typeof int. 你的GET方法中的代码应该是 Employee employee = db.Employees.Find(id); var model = new GradeSelectListViewModel() { ID = employee.EmployeeID,Name = employee.Name,Level = employee.Level,// convert to int? .... Grades = db.Grades.Select(x => new SelectListItem { Value = x.ID.ToString(),Text = x.Level }) }; return View(model); 并在视图中 @Html.DropDownListFor(x => Model.Level,Model.Grades,"Select Level") 另请注意,在POST方法中,如果返回视图,则需要重新分配SelectList,因为ModelState无效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 上传到Azure
- 如何使用CLR Profiler调试在IIS 7.5上运行的ASP.Net应用程序
- js_jquery_创建cookie有效期问题_时区问题
- ASP.NET MVC问题配置表单认证部分
- 将asp.net值传递给javascript块
- asp.net-mvc – 如何在ASP.NET MVC中使用编译的全局资源
- 获取当前的ASP.NET机器密钥
- asp.net-mvc – 带参数的MVC redirecttoaction与Area
- asp.net 中用easyui中的treegird的简单使用
- asp.net-mvc – 查看模板代码标签 – asp.net mvc – regd
推荐文章
站长推荐
- asp.net – 如何查询具有多个根和过滤的嵌套集模
- .net – <%中的含义是什么:和<%=有什么区别?
- asp.net-mvc – DDay iCal – 添加一个与会者
- asp.net-mvc – 如何使用post或get来检查控制器是
- asp.net-mvc – Razor视图引擎.cshtml页面中的Ou
- asp.net core高级EF Core2.0数据模型设计创建
- asp.net-mvc – 如何让JsonResult返回一个数组数
- asp.net-mvc – ASP.NET MVC路由从html页面开始
- ASP.NET Verses Winforms
- asp.net-mvc – EF 4.1 Code First:“非空值类型
热点阅读