ASP.NET MVC如何将自定义模型绑定到视图

3
我想将一个数组数据绑定到ASP.NET MVC视图中,我该怎么做?
抱歉我的问题表述不够清晰。目前,我创建了一个自定义对象(不是数组),我尝试将其传递给View,但是出现错误:
"The model item passed into the dictionary is of type 'ContactView' but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable'"

Eric,错误信息正是在说出问题所在。你正在传递一个自定义对象(而不是数组),但它期望的是一个通用对象集合。 - Robert Harvey
3个回答

6
您可以使用ViewData[],但最好的方法是实际创建一个视图类并返回该类。
假设您想要发送数据的视图名为Contacts。请创建一个新的视图类并返回该类。因此,不要使用以下代码:
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的对象来使其强类型化。这样,在实际视图中,它将继承如下:

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

这让您可以像调用函数一样调用数组...

Model.ContactsList

与此相反的是:
 object[] arrayOfItems = (Object[])ViewData["theContactsList"];

如果这种情况发生,你可能需要检查它是否为空等。这样做的好处是,如果你进行重构,会更加容易。更不用说使用强类型对象时的简便性和类型安全性了。


抱歉我的问题表述不够清晰。 目前我创建了一个自定义对象,试图将其传递给视图,但是出现了以下错误: “传递到字典中的模型项的类型为'ContactView',但此字典需要类型为'System.Collections.Generic.IEnumerable'的模型项。” - Smallville
看起来你在创建页面时告诉它要强制使用某种类型的IEnumerable(例如列表,字典等)。你的View的第一行是什么?它应该像<% Page = "... ..." Inherits="System.Web.MVC.ViewPage<ContactsView>" ... />这样的。它似乎可能有继承属性做类似这样的事情:Inherits="System.Web.MVC.ViewPage<IEnumerable<something something>>"。 - MunkiPhD
+1 这是一个非常好的描述。这是我看过的唯一一个清晰地展示了所有惯例的例子。 - Robert Harvey
好的,假设ContactsList包含具有2个字段“Name”和“Count”的对象。如何通过View访问它们? - Tony

0
把它放在ViewData里,然后使用for..each循环遍历它?

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接