2012-04-19 23 views
5

tôi muốn làm một cái gì đó như thế này để tôi có thể tạo ra một hộp thoại modal rằng tôi sẽ gọi muộn với jQueryLàm thế nào để sử dụng @ Html.EditorFor() mà không có mô hình xem

<div class="modal" id="modalName" style="display: none;"> 
<div class="modal-header"> 
    <a class="close" data-dismiss="modal">×</a> 
    <h3>Edit Contacts</h3> 
</div> 
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new Dictionary<string, object> { { "class", "form-horizontal" } })) 
{ 
    <div class="modal-body"> 
    @Html.EditorFor(model => new ViewModel(), "ViewModelTemplateName") 
    </div> 
    <div class="modal-footer"> 
     <a href="#" class="btn" data-dismiss="modal">Close</a> 
     <button type="submit" class="btn btn-primary"> 
      Submit</button> 

    </div> 
} 
</div> 

On line này

@Html.EditorFor(model => new ViewModel(), "ViewModelTemplateName") 

tôi nhận được lỗi

Templates có thể được sử dụng với truy cập lĩnh vực, tiếp cận tài sản, mảng đơn chiều i ndex, hoặc chỉ mục tùy chỉnh tham số biểu thức.

Tôi không hiểu tại sao nó sẽ chăm sóc nơi hoặc những gì các trường hợp là (miễn là đúng loại của nó)

@ Html.Partial ("~/Views/Shared/EditorTemplates/ViewModel. cshtml ", mới ViewModel()) hiện các trick, nhưng tôi phải khai báo đường dẫn đầy đủ các mẫu ... điều này sucks một chút.

vậy có cách nào tốt hơn để làm điều đó không?

+0

xin lỗi đó là lỗi đánh máy (để bảo vệ người vô tội) tôi sẽ chỉnh sửa và sửa lỗi. – Peter

+1

Có nhưng tiêu thụ mô hình không phải lúc nào cũng là điều bạn muốn làm. Chú thích dữ liệu là tốt họ cung cấp cho chúng tôi xác nhận tốt đẹp và tên đẹp. Khi tôi muốn làm một cái gì đó phong phú hơn với các trang của tôi trong jQuery nó tốt đẹp chỉ để làm cho viewmodel thành một khuôn mẫu và chúng cho phép những thứ như knockoutjs và twitter-bootstrap làm phép thuật của nó. – Peter

Trả lời

12

Về mặt kỹ thuật, đây không phải là trường hợp đó là vấn đề. Đó là biểu thức , không phải là hàm, bạn đang chuyển đến đó và trình phân tích cú pháp biểu thức được sử dụng bởi EditorFor, để lấy dữ liệu meta mà nó sử dụng để xác định thuộc tính v.v., không hỗ trợ biểu thức new.

Bạn chỉ có thể khai báo một thể hiện mới của mô hình bên ngoài của các tuyên bố EditorFor và làm điều này:

@{ var emptyViewModel = new ViewModel(); } 
@Html.EditorFor(model => emptyViewModel, "ViewModelTemplateName") 

Điều đó sẽ làm việc.

Điều đó nói rằng - không sử dụng một phần của model trong biểu thức hơi lạ. Bạn có lẽ nên xem xét việc giải nén hộp thoại ra thành chế độ xem riêng của nó có kiểu là ViewModel làm kiểu mô hình và sau đó bạn có thể sử dụng EditorForModel trong đó và gọi từ chế độ xem cha mẹ này bằng cách sử dụng new ViewModel() làm mô hình bạn chuyển đến.

+0

Yep đã hoạt động, cảm ơn ... và bạn đã đúng về việc thực hiện một phần lượt xem. Tôi đang xem xét điều đó xảy ra ngay bây giờ. – Peter

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