8

Tôi muốn xây dựng một khung nhìn một phần lấy cột mô hình và in nó. Something như thế:asp.net mvc - chuyển một phần mô hình dữ liệu sang một phần xem

Vào xem:

@model IEnumerable<products_comparison.Models.Product> 
@{ 
ViewBag.Title = "Index"; 

var Brand = (from r in Model 
      select r.Brand).Distinct(); 
} 
<h2> 
Index</h2> 

@Html.RenderPartial("_DisplayAttribute",Brand) 

Và tại xem phần:

<table> 
    <tr> 
     <th> 
      Brand 
     </th> 
    </tr> 
    @foreach (var row in Model) 
    { 
     <tr> 
      <td> 
       @Html.DisplayFor(r => row) 
      </td> 
     </tr> 
    } 
</table> 

Có một vài vấn đề tôi chạy vào:

  1. Trình biên dịch không cho phép tôi gửi Barnd đến một phần xem.
  2. Nếu bạn nhìn vào mã xem một phần, bạn sẽ thấy từ Nhãn hiệu, là tên cột. Tôi không muốn mã hóa cứng từ "Nhãn hiệu" trong phần xem, thay vào đó tôi thích rằng tên cột sẽ ở đó.
  3. Trong chế độ xem một phần, tôi cần đặt @model products_comparison.Models.Product, nhưng tôi không muốn gửi bảng lỗ. Tôi chỉ muốn gửi một cột - Nhưng tôi không biết phải đặt gì ở đó ..

Cảm ơn!

EDIT:

Chỉ cần để xóa một điều, tôi muốn rằng quan điểm sẽ gọi cho xem một phần tương tự cho mỗi cột trong bảng (đối với hầu hết các cột trong bảng anyway) và mỗi lần tôi sẽ gửi một cột khác (cột giá trị riêng biệt chính xác).

Trả lời

7

Đối thử thay đổi @Html.RenderPartial("_DisplayAttribute",Brand) để @Html.Partial("_DisplayAttribute",Brand)

Bạn cũng sẽ cần phải xác định mô hình trong giao diện phần như @model products_comparison.Models.Brand hoặc một cái gì đó giống như nó

Cũng xin làm rõ 2 & 3 như họ không rõ ràng những gì bạn muốn

+0

câu trả lời của bạn tới 1 cố định nó .. Và tôi chỉnh sửa câu hỏi của tôi .. – Nir

+0

Cảm ơn! Câu trả lời của bạn thật tuyệt! –

+0

@Nir Nó thường hữu ích nếu bạn 'Chấp nhận' câu trả lời đã giúp bạn. (Xin cảm ơn.) –

12

Bắt đầu bằng cách tái cấu trúc và đưa đúng logic vào đúng vị trí. Truy vấn LINQ này hoàn toàn không có gì để thực hiện trong một khung nhìn. Chế độ xem không được phép thực hiện bất kỳ truy vấn LINQ nào hoặc bất kỳ thứ gì để lấy dữ liệu. Một khung nhìn có nghĩa vụ phải làm việc với dữ liệu mà nó được truyền cho nó từ hành động điều khiển dưới dạng một mô hình khung nhìn. Một hành động điều khiển sẽ xây dựng và chuyển một mô hình xem được điều chỉnh mà bạn xác định cho khung nhìn.

Vì vậy, như mọi khi bạn bắt đầu bằng cách định nghĩa một mô hình điểm cho rằng sẽ được thích nghi với yêu cầu của quan điểm của bạn:

public class MyViewModel 
{ 
    public IEnumerable<Brand> Brands { get; set; } 
} 

sau đó bạn viết một hành động điều khiển sẽ cư mô hình quan điểm này và vượt qua nó để xem :

public ActionResult Foo() 
{ 
    IEnumerable<products_comparison.Models.Product> products = ... 
    var model = new MyViewModel 
    { 
     Brands = (from r in Model select r.Brand).Distinct() 
    }; 
    return View(model); 
} 

sau đó một cái nhìn:

@model MyViewModel 
<table> 
    <tr> 
     <th> 
      Brand 
     </th> 
    </tr> 
    @Html.DisplayFor(x => x.Brands) 
</table> 

và cuối cùng bạn cou ld xác định một mẫu hiển thị tương ứng sẽ tự động được trả lại cho mỗi phần tử của Brands bộ sưu tập các mô hình điểm của bạn (~/Views/Shared/DisplayTemplates/Brand.cshtml):

@model Brand 
<tr> 
    <td> 
     @Html.DisplayForModel() 
    </td> 
</tr> 
+0

Cảm ơn bạn. Vấn đề của tôi với câu trả lời của bạn là địa chỉ xem cho cột Nhãn hiệu chứ không phải cột .. Tôi muốn rằng khung nhìn sẽ gọi cùng một phần xem cho mỗi cột trong bảng (đối với hầu hết các cột trong bảng). Bởi vì điều đó tôi đã không chỉ chuyển thương hiệu cho tầm nhìn, thay vào đó tôi gửi bảng lỗ. – Nir

+0

@nir, trong trường hợp này, bạn có thể điều chỉnh mô hình xem của mình sao cho nó chứa các cột và các hàng của bảng. –

+0

Vì vậy, làm thế nào nó deffer từ mô hình chính nó? – Nir

Các vấn đề liên quan