Mvc код первый стиль - PullRequest
       3

Mvc код первый стиль

0 голосов
/ 22 июня 2011

Я сделал простой веб-сайт MVC 3. Он работает нормально, но база данных и классы грязные, потому что мне нужно было создавать выпадающие списки, и я не представляю, как реализовать списки сброса, используя другой стиль.

Вот как это выглядит:

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 лишние ненужные столбцы в базе данных. Любой другой способ сделать это чище / лучше?

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Ваш класс должен выглядеть следующим образом

public class Users
{
   public int ID {get; set;}
   ...
   public virtual int DeptId {get; set;}
    [ForeignKey("DeptId")]
   public virtual Department Dept {get; set;}

}

Затем в вашем контроллере MVC .NET вы выполняете запрос для заполнения List DeptList.DeptList может храниться в ViewBag.DeptList или как свойство модели, которую вы возвращаете в представление.

string SelectedDept не требуется.Когда вы используете DropDownListFor помощник, он автоматически установит для вас Users.DeptId.

Также вы можете рассмотреть возможность переименования «Users» в «User» =)

0 голосов
/ 22 июня 2011

Список должен быть открыт только для того, что придумано ViewModel.

Из того, что я читаю в вашем посте, вы связываете фактический объект POCO непосредственно с представлением. Обычно это не в ваших интересах (одна из причин - то, что вы видите). Вы тесно связываете свои модели пользовательского интерфейса со своими объектами данных. Это не та ситуация, в которой вы хотите оказаться.

Вместо привязки 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.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...