2013-03-05 20 views
5

Tôi đã điều sau đây:Làm cách nào để chỉnh sửa các đối tượng con dưới dạng MVC4?

@foreach (var parent in Model.Parents) 
{  
    @foreach (var child in parent.Children) 
    {  
     @Html.TextAreaFor(c => child.name)  
    }     
} 

Làm thế nào tôi có thể nhận được biên tập để làm việc cho các đối tượng trẻ? Tôi cố gắng một cái gì đó như thế này cũng như:

<input type="hidden" name="children.Index" value="@child.Id" /> 
<textarea name="children[@child.Id]" >@child.Name</textarea> 

Để vượt qua một IDictionary với bộ điều khiển nhưng tôi nhận được một lỗi:

[InvalidCastException: Specified cast is not valid.] 
    System.Web.Mvc.CollectionHelpers.ReplaceDictionaryImpl(IDictionary`2 dictionary, IEnumerable`1 newContents) +131 

Điều này có vẻ giống như một nhiệm vụ rất phổ biến ... là có một giải pháp đơn giản này? Tôi đang thiếu gì? Tôi có cần sử dụng Mẫu Trình chỉnh sửa không? Nếu vậy, bất kỳ ví dụ tương thích MVC4 sẽ là tuyệt vời.

Trả lời

11

is there a simple solution to this?

Có.

What am I missing?

Mẫu biên tập.

Do I need to use an Editor Template?

Có.

If so, any MVC4-compatible examples would be fantastic.

ASP.NET MVC 4? Man, các mẫu biên tập tồn tại từ ASP.NET MVC 2. Tất cả những gì bạn cần làm là sử dụng chúng.

Vì vậy, bắt đầu bằng cách loại bỏ bên ngoài foreach vòng lặp và thay thế nó bằng:

@model MyViewModel 
@Html.EditorFor(x => x.Parents) 

và sau đó rõ ràng là xác định một mẫu trình soạn thảo sẽ được trả lại tự động cho mỗi yếu tố của bộ sưu tập Parents (~/Views/Shared/EditorTemplates/Parent.cshtml):

@model Parent 
@Html.EditorFor(x => x.Children) 

và sau đó là mẫu trình chỉnh sửa cho từng phần tử của bộ sưu tập Children (~/Views/Shared/Editortemplates/Child.cshtml), nơi chúng tôi sẽ loại bỏ bên trong foreach phần tử:

@model Child 
@Html.TextAreaFor(x => x.name) 

mọi thứ hoạt động theo quy ước trong ASP.NET MVC. Vì vậy, trong ví dụ này, tôi giả định rằng ParentsIEnumerable<Parent>Children là một IEnumerable<Child>. Thích ứng với tên của các mẫu của bạn cho phù hợp.

Kết luận: mỗi khi bạn sử dụng foreach hoặc for trong chế độ xem ASP.NET MVC, bạn đang làm sai và bạn nên xem xét loại bỏ và thay thế bằng mẫu trình chỉnh sửa/hiển thị.

+0

Cảm ơn Darin. Tôi đang sử dụng các mẫu bây giờ và chúng đá. chúc mừng! – RobVious

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