Nếu tôi có một ViewModel như thế này:ASP.NET MVC 3 Custom Display Template Với UIHint - Đối với vòng lặp yêu cầu?
public class MyViewModel
{
[UIHint("SomeTemplate")]
public ICollection<SomeViewModel> Submodel { get; set; }
}
Và một mạnh mẽ-gõ Xem với một dòng của HTML như thế này:
@Html.DisplayFor(model => model.Submodel)
Và một trưng bày mẫu với một chữ ký như thế này:
@model MvcApplication1.Models.SomeViewModel
Tôi gặp lỗi khi nói "mục mẫu là loại List<SomeViewModel>
nhưng từ điển này yêu cầu kiểu máy kiểu SomeViewModel
".
Điều đó có ý nghĩa, nhưng tôi đã hy vọng các họa tiết được xây dựng trong MVC sẽ khởi động, xem đó là IEnumerable
của một cái gì đó và làm việc để gọi mẫu của tôi N số lần, như thường lệ đối với Html.DisplayFor
không có gợi ý.
Vì vậy, có vẻ như [UIHint]
ghi đè chức năng đó?
Rõ ràng tôi có thể trỏ đến một mẫu khác chấp nhận bộ sưu tập và gọi số Html.DisplayForModel()
, về cơ bản mô phỏng các đồ họa MVC. Nhưng tôi hy vọng tránh điều đó. Thành thật mà nói tôi muốn làm một vòng lặp foreach hơn là có 1 dòng "wrapper" mẫu.
Bất kỳ ý tưởng nào tốt hơn?
Nó giống như tôi muốn nói: "Hey MVC, đưa ra một mẫu cho mỗi một trong những kẻ. Nhưng thay vì sử dụng quy ước tên để tìm mẫu, đây là một gợi ý".
vì vậy không có cách nào để tận dụng MVC tích hợp tính năng thông minh khuôn mẫu (loop ngầm) trong khi vẫn sử dụng uihint? – RPM1984
Không, không phải trong kiến thức của tôi. Thậm chí nếu bạn muốn thực hiện nó, những gì nên được hiển thị để bao quanh tất cả các yếu tố? Trong một số trường hợp, nó phải là một bảng, trong trường hợp khác là một ul/ol. – mathieu
điều là, tôi đã có một mẫu hiển thị cho 'SomeViewModel', nhưng lý do tôi đang sử dụng UIHint là vì tôi muốn ghi đè lên mẫu mặc định này bằng mẫu mới. Việc tạo khuôn mẫu mặc định cho một bộ sưu tập sẽ đơn giản chỉ hiển thị mẫu N riêng lẻ. Nó không đưa ra quyết định về ul/table. Tôi chỉ muốn vẽ ra một ** mẫu N khác nhau **. nhưng có vẻ như nó không thể được thực hiện mà không có một vòng lặp for, mà kinda sucks. Tôi luôn cố gắng tránh các vòng lặp. – RPM1984