Lỗi có nghĩa là bạn đang điều hướng đến một chế độ xem có mô hình được khai báo là typeof Foo
(bằng cách sử dụng @model Foo
), nhưng bạn thực sự đã chuyển cho nó một mô hình là typeof Bar
(lưu ý rằng thuật ngữ từ điển được sử dụng vì một mô hình được chuyển đến chế độ xem qua a ViewDataDictionary
) .
Lỗi có thể do
Chuyển mô hình sai từ phương thức bộ điều khiển sang chế độ xem (hoặc chế độ xem một phần)
Các ví dụ phổ biến bao gồm sử dụng truy vấn tạo một đối tượng ẩn danh (hoặc tập hợp các đối tượng ẩn danh) và chuyển nó đến chế độ xem
var model = db.Foos.Select(x => new
{
ID = x.ID,
Name = x.Name
};
return View(model);
hoặc chuyển một bộ sưu tập các đối tượng đến một chế độ xem mong đợi một đối tượng duy nhất
var model = db.Foos.Where(x => x.ID == id);
return View(model);
Có thể dễ dàng xác định lỗi tại thời điểm biên dịch bằng cách khai báo rõ ràng kiểu mô hình trong bộ điều khiển để khớp với mô hình trong khung nhìn hơn là sử dụng var
.
Chuyển mô hình sai từ chế độ xem sang chế độ xem một phần
Cho mô hình sau
public class Foo
{
public Bar MyBar { get; set; }
}
và một dạng xem chính được khai báo với @model Foo
và một dạng xem được khai báo với @model Bar
, sau đó
Foo model = db.Foos.Where(x => x.ID == id).Include(x => x.Bar).FirstOrDefault();
return View(model);
sẽ trả về mô hình chính xác cho khung nhìn chính. Tuy nhiên, ngoại lệ sẽ được ném ra nếu chế độ xem bao gồm
@Html.Partial("_Bar")
Theo mặc định, mô hình được chuyển đến dạng xem một phần là mô hình được khai báo trong dạng xem chính và bạn cần sử dụng
@Html.Partial("_Bar", Model.MyBar)
để chuyển thể hiện của Bar
sang dạng xem một phần. Cũng lưu ý rằng nếu giá trị của MyBar
là null
(chưa được khởi tạo), thì theo mặc định Foo
sẽ được chuyển cho một phần, trong trường hợp đó, nó cần phải được
@Html.Partial("_Bar", new Bar())
Khai báo một mô hình trong một bố cục
Nếu tệp bố cục bao gồm khai báo mô hình, thì tất cả các dạng xem sử dụng bố trí đó phải khai báo cùng một mô hình hoặc một mô hình dẫn xuất từ mô hình đó.
Nếu bạn muốn bao gồm html cho một mô hình riêng biệt trong một Bố cục, thì trong Bố cục, hãy sử dụng @Html.Action(...)
để gọi một [ChildActionOnly]
phương thức khởi tạo mô hình đó và trả về dạng xem một phần cho nó.
return View
thay vìreturn PartialView
để một cái gì đó để chỉ kiểm tra