2009-05-15 4 views
3

Я хотел бы привязать данные массива для просмотра в ASP.NET MVC, как я могу это сделать?ASP.NET MVC как связать пользовательскую модель для просмотра

извините за непонятным о себе вопрос. Прямо сейчас, я создаю пользовательский объект (не массив), я попытался передать его View, но ошибка показывает

«Элемент модели, переданный в словарь, имеет тип« ContactView », но для этого словаря требуется модель Элемент типа «System.Collections.Generic.IEnumerable»

+0

Эрик, сообщение об ошибке говорит точно, что не так. Вы передаете ему пользовательский объект (а не массив), но он ожидает общий набор объектов. –

ответ

6

Вы можете использовать ViewData [], но лучшим способом было бы создать класс представления и вернуть его.

Итак, представление, которое вы хотите отправить, называется «Контакты». Создайте новый класс View и верните его. так что вместо этого:

public ActionResult Contacts(){ 
    ViewData["contacts"] = arrayOfContacts[]; 
    ... 
    return View(); 
} 

Вы можете получить сильно типизированных, делая это:

public class ContactsView(){ 
    Object[] ContactsList {get;set;} 
} 

public ActionResult Contacts(){ 
    ... 
    return View(new ContactsView(){ 
     ContactsList = arrayOfContacts[]; 
    }); 
} 

Тогда в реальной точки зрения, то его можно будет сильно типизированных принимая объекты типа ContactsView. Таким образом, в действительном View, которые он унаследует так:

... Inherits="System.Web.Mvc.ViewPage<ContactsView>" ... 

, который позволяет назвать ваш массив как ...

Model.ContactsList 

в противоположность этому:

object[] arrayOfItems = (Object[])ViewData["theContactsList"]; 

В этом случае вы, вероятно, захотите проверить, не является ли оно нулевым и т. Д. Преимущество этого в том, что если вы реорганизуете это намного проще. Не говоря уже о легкости и типе безопасности использования сильно типизированных объектов.

+0

извините за непонятно о моем вопросе. Прямо сейчас, я создаю пользовательский объект, я пытался передать его в View, но ошибка показывает «Элемент модели, переданный в словарь, имеет тип« ContactView », но для этого словаря требуется элемент модели типа« System.Collections » .Generic.IEnumerable " – Smallville

+0

Похоже, что когда вы создали страницу, которую вы сказали ей, она была строго набрана из некоторого типа IEnumerable (то есть списка, словаря и т. Д.). Что говорит первая строка вашего представления? Это должно быть что-то вроде <% Page = "... ..." Inherits = "System.Web.MVC.ViewPage " ... />. Кажется, что , похоже, имеет атрибут inherit, выполняющий что-то вроде: Inherits = "System.Web.MVC.ViewPage >" – MunkiPhD

+0

+1 Это действительно приятное описание. Это единственный пример, который я видел, который ясно показывает все соглашения. –

0

Поместите его в ViewData и используйте для ... для его прокрутки?

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