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直接绑定到视图。 希望有帮助!     

要回复问题请先登录注册