2012-05-27 3 views
0

У меня есть действие, которое создает список и возвращает его на мой взгляд ..MVC3 Razor - Модели и виды

public ActionResult GetCustomers() 
    { 
     return PartialView("~/Views/Shared/DisplayTemplates/Customers.cshtml", UserQueries.GetCustomers(SiteInfo.Current.Id)); 
    } 

И в "~/Views/Shared/DisplayTemplates/Customers.cshtml" вид I имеют следующее:

@model IEnumerable<FishEye.Models.CustomerModel> 
@Html.DisplayForModel("Customer") 

Тогда у меня есть в "~/Views/Shared/DisplayTemplates/Customer.cshtml" вид:

@model FishEye.Models.CustomerModel 
@Model.Profile.FirstName 

Я получаю т он ошибка:

The model item passed into the dictionary is of type System.Collections.Generic.List`1[Models.CustomerModel]', but this dictionary requires a model item of type 'Models.CustomerModel'. 

Не должно отображать Customer.cshtml для каждого элемента коллекции в Customers.cshtml?

Помощь!

ответ

1

Я не уверен, почему вы вызываете частичное представление, подобное этому. Если это мнение о клиенте, почему бы не поставить его под папку Views/Customer? Помните, ASP.NET MVC больше Условные обозначения. поэтому я всегда буду придерживаться условностей (если только не будет необходимости настраивать себя), чтобы это было просто.

Чтобы справиться с этой ситуацией, я хотел бы сделать это таким образом,

Customer и CustomerList модель/Videmodel

public class CustomerList 
{ 
    public List<Customer> Customers { get; set; } 
    //Other Properties as you wish also 
} 

public class Customer 
{ 
    public string Name { get; set; } 
} 

И в методе действия, я бы возвращать объект CustomerList класса

CustomerList customerList = new CustomerList(); 
customerList.Customers = new List<Customer>(); 
customerList.Customers.Add(new Customer { Name = "Malibu" }); 
// you may replace the above manual adding with a db call. 
return View("CustomerList", customerList); 

Теперь должен быть вид называется CustomerList.cshtml под Views/YourControllerName/ папку. Это мнение должно выглядеть следующим образом

@model CustomerList 
<p>List of Customers</p> 
@Html.DisplayFor(x=>x.Customers) 

имеет вид называется Customer.cshtml под Views/Shared/DisplayTemplate с с этим содержанием

@model Customer 
<h2>@Model.Name</h2> 

Это даст вам желаемый результат.

+0

Отлично, спасибо, это сработало очарование! –

+0

@JamesWoodley: Добро пожаловать. Рад, что смог помочь. – Shyju

1

Ваше мнение ожидает одну модель:

@model FishEye.Models.CustomerModel // <--- Just one of me 

Вы передавая ему анонимный список:

... , UserQueries.GetCustomers(SiteInfo.Current.Id) // <--- Many of me 

Вы должны изменить свое мнение, чтобы принять список или определить, какой элемент в список должен использоваться, прежде чем передавать его в представление. Имейте в виду, список с 1 элементом по-прежнему является списком, и View не допускается догадываться.

Смежные вопросы