Khi xây dựng mô hình xem trong MVC3 của asp.net, mã sẽ đi đến đâu để khởi tạo các đối tượng của mô hình chế độ xem đó? Tôi đang làm nó chủ yếu trong bộ điều khiển ngay bây giờ, ngoài mã để truy vấn cơ sở dữ liệu. Dưới đây là một ví dụ trong mã:Mã để xây dựng mô hình xem ở đâu?
Xem mẫu:
public class WorkListVM
{
//list for employees
[Display(Name = "Select A Employee")]
[Required]
public int? EmployeeId { get; set; }
public GenericSelectList EmployeeList { get; set; }
}
khiển Code:
//build view model
var vm = new WorkListVM();
//build employee list
vm.EmployeeList = new GenericSelectList(0,"-- Select Employee --");
var employees = new List<Employee>();
using (var gr = new GenericRepo<Employee>())
{
employees = gr.Get().ToList();
}
foreach(var employee in employees)
{
var gl = new GenericListItem();
gl.Id = employee.EmployeeId;
gl.DisplayFields = employee.FirstName + " " + employee.LastName;
vm.EmployeeList.Values.Add(gl);
}
Generic Chọn Danh sách là một lớp đơn giản để giữ dữ liệu mà đi trong helper @html.dropdownfor
's SelectList
. Tôi xây dựng các danh sách lựa chọn này, và cũng xây dựng các cấu hình dữ liệu tương tự cho các mô hình khung nhìn bên trong mã điều khiển. Bộ điều khiển lưu trữ mã này có tổng số 109 dòng mã, do đó, nó không phải là rất lớn hoặc ngoài tầm kiểm soát. Tuy nhiên, tôi luôn luôn phấn đấu để giảm sự thừa và đôi khi mã trong //build employee list
kết thúc lên được sao chép dán (ugh, tôi ghét sao chép dán) vào bộ điều khiển khác.
Có nơi nào tốt hơn để có mã này không? Tôi có nên sử dụng mẫu nhà máy để xây dựng dữ liệu cho các danh sách chọn/các đối tượng dữ liệu chế độ xem khác không?
EDIT
Cảm ơn tất cả sự giúp đỡ của bạn. Đây là những gì tôi đã làm. Tôi đã kết thúc thực hiện một phương pháp bên trong chọn lớp danh sách chung rất giống với .ToSelectList (...) được đề xuất bởi Richard và Jesse:
public class GenericSelectList
{
public List<GenericListItem> Values { get; set; }
public int StartValue { get; set; }
public string Message { get; set; }
public GenericSelectList(int StartValue = 0, string Message = "select")
{
Values = new List<GenericListItem>();
this.StartValue = StartValue;
this.Message = Message;
}
public void BuildValues<T>(List<T> items, Func<T, int> value, Func<T, string> text) where T : class
{
this.Values = items.Select(f => new GenericListItem()
{
Id = value(f),
DisplayFields = text(f)
}).ToList();
}
}
Nếu bạn trả lại chế độ xem của bạn thành chế độ xem, thì mã sẽ nằm trong bộ điều khiển. –
@ 白 ジ ェ ー ム ス - Có, ở cuối phương thức actionresult này là 'return View (vm);'. Chế độ xem được nhập mạnh mẽ '@model WorkListVM'. Một số mã này được sử dụng nhiều lần (trong các bộ điều khiển khác nhau). Nó sẽ không có ý nghĩa để có một nhà máy kết thúc tốt đẹp việc tạo ra các đối tượng viewmodel này để giảm sự dư thừa? –