Giả sử tôi có một mô hình đơn giản để giải thích mục đích:EditorFor IEnumerable <T> với TEMPLATENAME
public class Category
{
...
public IEnumerable<Product> Products { get; set; }
}
Xem:
@model Category
...
<ul>
@Html.EditorFor(m => m.Products)
</ul>
EditorTemplate:
@model Product
...
<li>
@Html.EditorFor(m => m.Name)
</li>
Lưu ý rằng tôi không phải xác định EditorTemplate cho IEnumerable<Product>
, tôi chỉ có thể tạo nó choMô hìnhvà khung MVC đủ thông minh để sử dụng mẫu của riêng nó cho IEnumerable. Nó lặp qua bộ sưu tập của tôi và gọi cho EditorTemplate của tôi.
Các html đầu ra sẽ là một cái gì đó như thế này
...
<li>
<input id="Products_i_Name" name="Products[i].Name" type="text" value="SomeName">
</li>
mà tôi có thể gửi đến bộ điều khiển của tôi sau khi tất cả.
Nhưng tại sao MVC không thực hiện thủ thuật khi tôi xác định EditorTemplate với tên mẫu?
@Html.EditorFor(m => m.Products, "ProductTemplate")
Trong trường hợp đó tôi phải thay đổi loại tài sản để IList<Product>
, lặp thông qua bộ sưu tập của bản thân mình và gọi EditorTemplate
@for (int i = 0; i < Model.Products.Count; i++)
{
@Html.EditorFor(m => m.Products[i], "ProductTemplate")
}
mà dường như loại workaround bẩn với tôi. Có giải pháp nào khác, sạch hơn để làm điều này không?
thể trùng lặp của [Đúng, cách thành ngữ để sử dụng các mẫu biên tập tùy chỉnh với các mô hình IEnumerable trong ASP.NET MVC] (http://stackoverflow.com/questions/25333332/correct-idiomatic-way-to-use -custom-editor-templates-with-ienumerable-models-in) – GSerg
Không chắc chắn làm thế nào tôi bỏ qua câu hỏi này khi tìm kiếm trước khi tạo [câu hỏi đó] (http://stackoverflow.com/questions/25333332/correct-idiomatic-way- để sử dụng-tùy chỉnh-editor-templates-với-ienumerable-mô hình-in) của tôi. Theo đó, câu hỏi của tôi phải được đóng lại như một bản sao của câu hỏi này, nhưng tôi tin rằng nó nên là một cách khác vì có cách giải quyết khác. – GSerg
@GSerg, cảm ơn bạn đã chia sẻ câu trả lời của mình. Tôi không thể nói rằng tôi thích bất kỳ giải pháp được đề xuất nào tốt hơn một vòng lặp 'for' đơn giản thông qua bộ sưu tập. Xin lỗi vì đã không rõ ràng với câu hỏi của tôi, nhưng tôi đã không tìm cách giải quyết vấn đề này, nhưng đối với sạch sẽ và (tôi đã hy vọng) là cách duy nhất để thực hiện điều này. Đó là lý do tại sao tôi không thể nói câu trả lời cho câu hỏi của bạn đã giải quyết được vấn đề của tôi, mặc dù câu hỏi của họ rất giống nhau. – Zabavsky