2011-06-21 38 views
6

Tôi đang xây dựng một trang web trong MVC và Mô hình Xem mà tôi đang chuyển đến Chế độ xem của tôi chứa một đối tượng tùy chỉnh có chứa danh sách các đối tượng tùy chỉnh của IEnumarable..NET MVC Razor Dynamic Form Generation

Ý tưởng là dao cạo sẽ tự động tạo biểu mẫu cho IEnumerable có thể là bất kỳ số lượng đối tượng nào.

@foreach (var data in Model.Kpi.Values) 
{ 
    <div class="editor-label"> 
     @Html.Label(data.Field.Name); 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => data.Value) 
     @Html.ValidationMessageFor(model => data.Value) 
    </div> 
} 

Biểu mẫu hiển thị hoàn hảo bao gồm chú thích dữ liệu tuy nhiên IEnumerable rỗng trong chức năng điều khiển bài đăng.

[HttpPost] 
public virtual ActionResult Create(KpiCreateViewModel vm) 
{ 
    return this.RedirectToAction(MVC.Kpi.Index()); 
} 

Tôi đã đặt điểm ngắt trên báo cáo trả về và kiểm tra nội dung của biến vm.

Có ai đề xuất phương pháp truy xuất dữ liệu biểu mẫu không?

Cảm ơn trước

Trả lời

2

Đó là bởi vì phương pháp EditorFor không có đủ thông tin để tạo ra một tên có thể được sử dụng bởi các DefaultModelBinder khi bạn gửi lại. Hãy xem thuộc tính name đang được tạo trong HTML. Tên được tạo ra từ biểu thức mà bạn truyền vào, nhưng bạn không phải dẫn đường đầy đủ đến thuộc tính trong vòng lặp.

Thay đổi nó thành vòng lặp được lập chỉ mục và nó nên hoạt động.

@for(var i=0; i<Model.Kpi.Values.Count(); i++) 
{ 
    <div class="editor-label"> 
     @Html.Label(model.Kpi.Values[i].Field.Name); 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Kpi.Values[i].Value) 
     @Html.ValidationMessageFor(model => model.Kpi.Values[i].Value) 
    </div> 
} 
+0

Có nói rằng, [this post] (http://stackoverflow.com/questions/1983999/how-to-use-editorfor-inside-a-foreach) gợi ý rằng bạn có thể sử dụng 'foreach'. Nhưng hãy nhìn vào tên được tạo ra và điều đó sẽ cho bạn manh mối. –

+0

Điều đó dường như đã làm một nửa trận chiến. Đối tượng bây giờ có một giá trị, nhưng nó không có một Field.name. Để làm rõ lớp KpiValue có các thuộc tính, đối tượng trường, đối tượng Kpi và chuỗi giá trị. Cần một số cách để xác định "Trường". – JConstantine