【问题标题】:ASP.NET MVC how to bind custom model to viewASP.NET MVC 如何将自定义模型绑定到视图
【发布时间】:2009-05-15 13:49:02
【问题描述】:

我想绑定一个数组数据以在 ASP.NET MVC 中查看,我该怎么做?

抱歉,我不清楚我的问题。 现在,我创建了一个自定义对象(不是数组),我试图将它传递给 View,但错误显示

“传入字典的模型项属于‘ContactView’类型,但此字典需要‘System.Collections.Generic.IEnumerable’类型的模型项”

【问题讨论】:

  • Eric,错误消息准确地说明了问题所在。您正在向它传递一个自定义对象(不是数组),但它需要一个通用的对象集合。

标签: asp.net-mvc gridview model


【解决方案1】:

您可以使用 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 类型的对象来对其进行强类型化。这样在实际的视图中,让它像这样继承:

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

这允许您像...一样调用您的数组

Model.ContactsList

与此相反:

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

在这种情况下,您可能想要检查它是否不为空等。这样做的好处是,如果您重构它会容易得多。更不用说使用强类型对象的易用性和类型安全性了。

【讨论】:

  • 对不起,我不清楚我的问题。现在,我创建了一个自定义对象,我尝试将其传递给 View,但错误显示“传递到字典的模型项的类型为‘ContactView’,但此字典需要‘System.Collections.Generic’类型的模型项.IEnumerable"
  • 似乎当您创建页面时,您告诉它是某种类型的 IEnumerable(即列表、字典等)的强类型。你的观点的第一行说什么?它应该类似于 " ... />。似乎它可能具有继承属性,例如: Inherits="System.Web.MVC.ViewPage>"
  • +1 这是一个非常好的描述。这是我见过的唯一一个清楚地显示所有约定的例子。
  • 好的,假设 ContactsList 包含具有 2 个字段“名称”和“计数”的对象。如何通过 View 访问它们?
【解决方案2】:

放到ViewData中,用for..each循环遍历?

【讨论】:

    【解决方案3】:

    看这个链接:http://nerddinnerbook.s3.amazonaws.com/Part6.htm

    基本上,您可以将数组加载到 viewdata 对象中,然后随意使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多