2013-07-19 49 views
9

Về cơ bản, tôi đang thực hiện một thử nghiệm do một trong các thủ đoạn gây ra.khác nhau giữa @Model và @model

Bằng cách sử dụng return View(list_a) trong bộ điều khiển tôi đã thông qua một danh sách vào quan điểm của tôi, Trên trang Xem của tôi, mã này là như sau:

@{ 
    ViewBag.Title = "KYC_Home"; 
} 
@using UniBlue.Models; 
@model UniBlue.Models.KYC 
... 
@foreach(KYC a in Model) 
... 

sẽ có một ngoại lệ nói:

CS1579: foreach statement cannot operate on variables of type 'UniBlue.Models.KYC' because 'UniBlue.Models.KYC' does not contain a public definition for 'GetEnumerator' 

Nhưng , khi tôi thay đổi mã của mình thành @Model Trang có vẻ tốt nhưng trên tiêu đề hiển thị:

System.Collections.Generic.List`1[UniBlue.Models.KYC] UniBlue.Models.KYC 

dưới dạng văn bản HTML thông thường

Ai có thể cho tôi biết tại sao điều này xảy ra? Tôi nên làm gì để loại bỏ dòng tiêu đề lạ?

Trả lời

18

Một được sử dụng để khai báo kiểu mạnh rằng mô hình là, và khác được sử dụng để truy cập vào mô hình riêng của mình.

Phần sau cho biết loại mạnh được sử dụng cho kiểu máy là UniBlue.Models.KYC.

@model UniBlue.Models.KYC 

Điều này về cơ bản tuyên bố 'biến' Model làm loại đó. Nó giống như làm những điều sau đây:

UniBlue.Models.KYC Model; 

Model là một biến, @model là một từ khóa nói những gì loại Model sẽ.

Lỗi của bạn là do bạn đã khai báo Model là KYC, nhưng KYC không được liệt kê. Bạn đang sử dụng số điện thoại này trong một số foreach mong đợi một số IEnumerable<UniBlue.Models.KYC> không phải như vậy.

Nếu mô hình của bạn thực sự là một danh sách, sau đó sử dụng

@model IEnumerable<UniBlue.Models.KYC> 
+0

Tốt điểm! Nhưng lý do nó chạy khi tôi viết như thế nào: Model UniBlue.Models.KYC, không có giá trị nào được gán cho chính Model đó? – LifeScript

+0

Tôi không hiểu câu hỏi của bạn. –

+0

nhưng thay vì viết "mô hình UniBlue.Models.KYC", tôi đã sử dụng 'Model UniBlue.Models.KYC' và nó cũng chạy thành công và hiển thị tốt, vì vậy tôi vẫn không biết tại sao điều đó không gây ra bất kỳ ngoại lệ và nhận được dữ liệu danh sách – LifeScript

6

@model biểu thị kiểu của một biến bạn tham khảo như @Model

@model string 

@Model.ToUpper(); // works as @Model is of type string 
Các vấn đề liên quan