如何解决Mvc代码第一个样式
| 我做了一个简单的MVC 3网站。它工作正常,但是数据库和类杂乱无章,因为我需要创建下拉列表,而且我不知道如何使用不同的样式来实现drowdownlist。 情况如下:public class Departments
{
public int ID {get; set;}
...
}
public class Users
{
public int ID {get; set;}
...
public Department Dept {get; set;}
public List<Department> DeptList {get; set;}
public string SelectedDept {get; set;}
}
然后我使用了DropDownListFor助手。不幸的是,我是第一手了解此代码的人。因此,现在我在数据库中获得了这2个多余的列。还有其他方法可以做得更好/更清洁吗?
解决方法
你的班级应该看起来像这样
public class Users
{
public int ID {get; set;}
...
public virtual int DeptId {get; set;}
[ForeignKey(\"DeptId\")]
public virtual Department Dept {get; set;}
}
然后,在MVC .NET Controller中,执行查询以填充List DeptList。
DeptList可以存储在ViewBag.DeptList中,也可以存储为返回视图的Model的属性。
不需要字符串SelectedDept。当您使用DropDownListFor助手时,它将自动为您设置Users.DeptId。
另外,您可能需要考虑将\“ Users \”重命名为\“ User \” =)
, 该List应该只暴露于ViewModel的名称。
根据您在帖子中看到的内容,您正在将实际的POCO对象直接绑定到视图。通常这并不符合您的最大利益(原因之一就是您所看到的。)您正在将UI模型与数据实体紧密耦合。这不是您想遇到的情况。
不要将POCO绑定到视图,而是创建一个中介(如果需要的话),创建视图模型,就像这样。
public class SomeMethodViewModel
{
public SomeMethodViewModel()
{
DepartmentList = new List<Department>();
}
public int Id { get; set; }
public string SelectedDepartment { get; set; }
public List<Department> DepartmentList { get; set;
}
现在,您有了一个特定于您的操作的视图模型,其中包含所需的确切信息。现在,您的操作类似于:
public ActionResult SomeMethod()
{
var vm = new SomeMethodViewModel();
vm.DepartmentList = **Some_Method_To_Retrieve_List_Of_Departments**
return View(vm);
}
现在,您具有绑定到视图的强类型模型,并且POCO保持整洁。当用户发回邮件并且您已验证数据时,只需将其映射到您的POCO实体即可。
达沃的答案也是正确的。我只是认为遗漏的一点是您似乎将POCO直接绑定到视图。
希望有帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。