2011-11-22 11 views
7

Tôi gặp sự cố lạ về trình chỉnh sửaĐối với trình trợ giúp từ MVC3. Đây là điều: tôi đang cố gắng để hiển thị một checkboxList và nó hoạt động nếu tôi không gọi explicity tên mẫu. Tuy nhiên nếu tôi cố gắng sử dụng tên mẫu, nó ném một ngoại lệ nói rằng tôi đang cố gắng để vượt qua một danh sách chung khi tôi chỉ cần vượt qua viewModel của tôi. Tôi sẽ chỉ cho một số mã để làm cho nó dễ hiểu hơn:Trình soạn thảo asp.net-mvc3 Đối với vấn đề tên mẫu

ViewModel

public class ChkViewModel 
{ 
    public string ContractName {get;set;} 
    public string Contract {get;set;} 
    public bool Checked {get;set;} 
} 

Các EditorFor Template (nó được gọi là ContractTemplate)

@model Models.ChkViewModel 
<p> 
    @Html.HiddenFor(x => x.Contract) 
    @Html.LabelFor(x => x.ContractName , Model.ContractName) 
    @Html.CheckBoxFor(x => x.Checked, new { @class = "chkContract" }) 
&nbsp;  
</p> 

Trích từ quan điểm của tôi

<div id="contractContainer"> 
    @Html.EditorFor(item=>item.ContractList) 
</div> 

Điều này hoạt động tốt. Nhưng nó cố gắng để làm điều này:

<div id="contractContainer"> 
    @Html.EditorFor(item=>item.ContractList, "ContractTemplate") 
</div> 

Nó ném InvalidOperationException nói rằng tôi phải vượt qua một ChkViewModel đơn giản và không phải là một GenericList ChkViewModel.

Tôi chỉ hỏi điều này vì tôi đã cố gắng tạo danh sách kiểm tra khác và tôi không thể làm cho nó hoạt động (thậm chí không hiển thị hộp kiểm) và khi tôi cố gắng đặt tên mẫu, để tôi có thể xem các hộp kiểm, nó ném lỗi đó.

+0

tại sao bạn muốn chỉ định tên mẫu? – epzee

+0

Như tôi đã đề cập ở đoạn cuối, tôi không cần nó trước nhưng khi tôi cố gắng tạo một ví dụ khác, nó không hoạt động. Bên cạnh đó, nếu đó là một tham số, tại sao không nên sử dụng nó? Nó sẽ không tốt hơn để biết tôi đang sử dụng mẫu nào, cụ thể? – AdrianoRR

Trả lời

6

Các thông báo lỗi là đúng, nếu bạn muốn sử dụng tên mẫu của bạn nó sẽ giống như thế này:

<div id="contractContainer"> 
    @for (int i = 0; i < item.ContractList.Count; i++) { 
     @Html.EditorFor(item => item.ContractList[i], "ContractTemplate") 
    } 
</div> 

này tương tự như những gì đang ASP.NET MVC làm đằng sau hậu trường cho bạn trong lần đầu tiên trường hợp (nó lặp qua bộ sưu tập và gọi mẫu của bạn).

+2

Hey, cảm ơn thomas, đã hoạt động. Nhưng tại sao ví dụ đầu tiên của tôi hoạt động chính xác khi tôi không chuyển tên mẫu? về cơ bản là cùng một danh sách kiểm tra. Tôi vẫn không nhận được những gì mvc làm đằng sau hậu trường. Bằng cách này, tôi hy vọng bạn tiếp tục cải thiện helper jqGrid của bạn. – AdrianoRR

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