2013-09-04 40 views
9

Tôi hiện có bộ điều khiển với câu lệnh LINQ mà tôi đang truyền dữ liệu từ chế độ xem của tôi. Tôi đang cố gắng tìm một phương pháp mã hóa hiệu quả hơn và tốt hơn để làm điều này. Bảng điều khiển nhà của tôi như sau.MVC 4 cách truyền dữ liệu chính xác từ bộ điều khiển để xem

Var Melt 
    Furnace1 = 
      (from item in db.tbl_dppITHr 
      where item.ProductionHour >= StartShift && item.ProductionHour <= EndDate 
      select item).Sum(x => x.Furnace1Total), 

ViewData["Furnace1Total"] = Melt.Furnace1; 

Trong chế độ xem của tôi, tôi tham khảo Chế độ xem Để hiển thị điều này. Sử dụng

@model dynamic 

Bây giờ tôi có khá nhiều câu lệnh LINQ bên trong phương pháp Chỉ mục. Và đối với mỗi người, tôi đang làm ViewData[]

Tôi hy vọng rằng ai đó có thể cho thấy cách tôi chuyển nhiều hơn một var từ bộ điều khiển sang chế độ xem không có phương thức ViewData hoặc ViewBag. Và làm thế nào tôi sẽ có được quyền truy cập vào điều này trong quan điểm của tôi.

+0

Đặt mô hình của bạn trong một lớp học như một mô hình điểm và sau đó vượt qua nó để xem. –

Trả lời

9

Bạn nên tạo ViewModel với tất cả dữ liệu cần thiết và sau đó chuyển dữ liệu đó xuống chế độ xem.

public class ViewModel 
{ 
    public List<int> Melt1 { get; set; } 

    public void LoadMeltProperties() 
    { 

     if (Melt1 == null) 
     { 
      Melt1 = new List<int>(); 
     } 

     Melt1 = (from item in db.tbl_dppITHr 
     where item.ProductionHour >= StartShift && item.ProductionHour <= EndDate 
     select item).Sum(x => x.Furnace1Total).ToList(); 
    } 

    public ViewModel Load() 
    { 
     LoadMeltProperties(); 
     return this; 
    } 
} 

public ActionResult YourControllerAction() 
{ 
     var vm = new ViewModel().Load(); 
     return View("ViewName", vm); 
} 

Sau đó, trong Xem của bạn, bạn có thể sử dụng một mô hình strongly typed hơn dynamic

@model ViewModel 

Sau đó bạn có thể duyệt qua các thuộc tính ViewModel của bạn thông qua:

foreach(var melt in Model.Melt1) { 
    // do what you require 
} 
+0

bạn không bỏ lỡ 'Model.' trong' foreach (var melt in Melt1) '? – sasjaq

+0

@sasjaq - vâng, cảm ơn :) –

+0

Tôi có một mô hình tạo ra như vậy là thực hành tốt nhất cho tôi để làm mã LINQ của tôi bên trong mô hình trong một phương pháp mới và gọi đó từ bộ điều khiển để vượt qua để xem? – Inkey

1

Sử dụng mô hình thay vì

var Melt 
Furnace1 = 
     (from item in db.tbl_dppITHr 
     where item.ProductionHour >= StartShift && item.ProductionHour <= EndDate 
     select item).Sum(x => x.Furnace1Total), 
return View("SomeVIew",MeltFurnace1) 

Theo quan điểm @model "TypeOfMeltFurnace1"

Bạn có thể tham khảo mô hình theo quan điểm của mẫu sở hữu

6

IMHO, bạn nên tạo một ViewModel một dữ liệu qua sử dụng nó.

Tạo một lớp

public class MyViewModel 
{ 
    public <MeltFurnace1Type> MeltFurnace1{get;set;} 
} 

Trong phương pháp hành động

public ActionResult Action() 
{ 
     MyViewModel vm = new MyViewModel(); 
     vm.MeltFurnace1 = something; 
     return View("YourViewName", vm); 
} 

Trong Xem

@model MyViewModel 

//You can access your property using 
Model.MeltFurnace1 
2

Nếu bạn cần phải vượt qua dữ liệu thực sự từ bộ điều khiển và dữ liệu của nó là phụ thuộc vào nội bộ các tham số điều khiển trạng thái hoặc đầu vào hoặc có các thuộc tính khác của "dữ liệu nghiệp vụ", bạn nên sử dụng phần Mô hình từ MVC pattern:

Đối tượng mẫu là các phần của ứng dụng triển khai logic cho miền dữ liệu của ứng dụng. Thông thường, các đối tượng mô hình truy xuất và lưu trữ trạng thái mô hình trong cơ sở dữ liệu. Ví dụ, một đối tượng sản phẩm có thể truy xuất thông tin từ cơ sở dữ liệu, vận hành trên đó, sau đó ghi thông tin cập nhật trở lại bảng sản phẩm trong cơ sở dữ liệu SQL Server .

Bạn có thể xem chi tiết here hoặc xem phần Models and Validation in ASP.NET MVC một phần của hướng dẫn của Microsoft.

  1. Add mô hình lớp:

    public class Person 
    { 
        public int Id { get; set; } 
        public string Name { get; set; } 
        public int Age { get; set; } 
        public string City { get; set; } 
    } 
    
  2. đèo mô hình đối tượng để quan điểm:

    public ActionResult Index() 
    { 
        var model = GetModel(); 
        return View(model); 
    } 
    
  3. Thêm strongly typed View qua xác định loại mô hình:

    @model Person 
    
  4. Sử dụng Model biến trong quan điểm của bạn:

    @Model.City 
    
Các vấn đề liên quan