C# 如何使用ViewModel在MVC4应用程序中实现IEnumerator
我试图在MVC4项目的一个视图中返回两个模型,方法如下。我有一个名为Product的模型,看起来像这样:C# 如何使用ViewModel在MVC4应用程序中实现IEnumerator,c#,asp.net-mvc-4,mvvm,ienumerator,C#,Asp.net Mvc 4,Mvvm,Ienumerator,我试图在MVC4项目的一个视图中返回两个模型,方法如下。我有一个名为Product的模型,看起来像这样: public class Product : IEnumerable<ShoppingCartViewModel>, IList<ShoppingCartViewModel> { public int ProductId { get; set; } public strin
public class Product : IEnumerable<ShoppingCartViewModel>,
IList<ShoppingCartViewModel>
{
public int ProductId { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
(...)
}
public class ShoppingCartViewModel : IEnumerable<Product>, IList<Product>
{
public List<Cart> CartItems { get; set; }
public decimal CartTotal { get; set; }
}
public IEnumerator<Object> GetEnumerator()
{
return this.GetEnumerator();
}
然后,我尝试以这种方式简单地显示两个不同模型的视图
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<projectname.ProductAndCartWrapperModel>" %>
(...)
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div>
<% foreach (projectname.Models.Product p in
ViewData.Model.product) { %>
<div>
<div id="ProductName"><%: p.Name %></div>
<div id="ProductPrice"><%: p.Price %></div>
</div>
<% } %>
</div>
<div>
<% foreach (projectname.ViewModels.ShoppingCartViewModel sc in
ViewData.Model.shoppingCart) { %>
<div>
<div id="Div1"><%: sc.CartItems %></div>
<div id="Div2"><%: sc.CartTotal %></div>
</div>
<% } %>
</div>
</asp:Content>
然后是两种型号的错误列表,如下所示:
does not implement interface member
'System.Collections.Generic.IEnumerable<projectname.ViewModels.ShoppingCartViewModel>.
GetEn umerator()'. 'projectname.Models.Product.GetEnumerator()' cannot implement
'System.Collections.Generic.IEnumerable<projectname.ViewModels.ShoppingCartViewModel>.
GetEnumerator()' because it does not have the matching return type of
'System.Collections.Generic.IEnumerator<projectname.ViewModels.ShoppingCartViewModel>'.
不实现接口成员
'System.Collections.Generic.IEnumerable。
GetEn umerator()projectname.Models.Product.GetEnumerator()无法实现
'System.Collections.Generic.IEnumerable。
GetEnumerator(),因为它没有匹配的返回类型
'System.Collections.Generic.IEnumerator'。
我觉得我很接近在一个页面上显示这两个模型,但我不知道如何实现IEnumerator并使类型匹配。我试着加上这样一个:
public class Product : IEnumerable<ShoppingCartViewModel>,
IList<ShoppingCartViewModel>
{
public int ProductId { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
(...)
}
public class ShoppingCartViewModel : IEnumerable<Product>, IList<Product>
{
public List<Cart> CartItems { get; set; }
public decimal CartTotal { get; set; }
}
public IEnumerator<Object> GetEnumerator()
{
return this.GetEnumerator();
}
public IEnumerator GetEnumerator()
{
返回此.GetEnumerator();
}
但那是徒劳的
如果有人能解释如何正确实现接口成员并获得构建的解决方案(如果可能的话),我将不胜感激 当
产品
继承自IEnumerable
时,这意味着迭代产品
将给出ShoppingCartViewModel
元素
<% foreach (Product p in ViewData.Model.product) { %>
应该是:
<% foreach (ShoppingCartViewModel p in ViewData.Model.product) { %>
但是你的设计很奇怪,也许你做得太过火了?当
产品
继承自IEnumerable
时,这意味着迭代产品
将得到ShoppingCartViewModel
元素
<% foreach (Product p in ViewData.Model.product) { %>
应该是:
<% foreach (ShoppingCartViewModel p in ViewData.Model.product) { %>
但是你的设计很奇怪,也许你做得太过分了?为什么
产品
实现了IEnumerable
?如果需要枚举视图中的某个对象,只需将视图模型设置为具有(要枚举的对象的)IEnumerable。你的视图模型看起来太复杂了。我这么做是因为教程也在这么做。但好吧,我只能列举出产品?我如何在viewmodel中实现这个IEnumerable?为什么产品
实现了一个IEnumerable
?如果需要枚举视图中的某个对象,只需将视图模型设置为具有(要枚举的对象的)IEnumerable。你的视图模型看起来太复杂了。我这么做是因为教程也在这么做。但好吧,我只能列举出产品?我如何在我的viewmodel中使这个IEnumerable?哇!结合bump的注释(删除IList实现)这样做可以消除大量错误。我现在遇到的4个错误与此类似:错误4的projectname.Models.Product“未实现接口成员”System.Collections.Generic.IEnumerable.GetEnumerator()'您知道如何解决此问题吗?这是因为您必须定义从IEnumerable
继承时如何进行枚举。如果您不需要为GetEnumerator
实现特定行为,您可以使用List
而不是IEnumerable
好的,删除IEnumerable确实会生成解决方案,但是当我转到这两个模型的页面时,我得到了以下错误:CS1579:foreach语句不能对“projectname.models.Product”类型的变量进行操作,因为“projectname.models.Product”不包含“GetEnumerator”的公共定义。所以我想我需要定义一个,我不知道怎么做。您仍然需要一个GetEnumerator
的实现来使用foreach
,这就是为什么我告诉您使用List
而不是IEnumerable
,因为它适合您的需要:公共类产品:List
。删除这两个选项将不允许您对集合进行迭代。谢谢您是个天才。解决方案正在生成,页面显示时没有错误。不幸的是,信息尚未显示,但必须能够解决。谢谢!哇!结合bump的注释(删除IList实现)这样做可以消除大量错误。我现在遇到的4个错误与此类似:错误4的projectname.Models.Product“未实现接口成员”System.Collections.Generic.IEnumerable.GetEnumerator()'您知道如何解决此问题吗?这是因为您必须定义从IEnumerable
继承时如何进行枚举。如果您不需要为GetEnumerator
实现特定行为,您可以使用List
而不是IEnumerable
好的,删除IEnumerable确实会生成解决方案,但是当我转到这两个模型的页面时,我得到了以下错误:CS1579:foreach语句不能对“projectname.models.Product”类型的变量进行操作,因为“projectname.models.Product”不包含“GetEnumerator”的公共定义。所以我想我需要定义一个,我不知道怎么做。您仍然需要一个GetEnumerator
的实现来使用foreach
,这就是为什么我告诉您使用List
而不是IEnumerable
,因为它适合您的需要:公共类产品:List
。删除这两个选项将不允许您对集合进行迭代。谢谢您是个天才。解决方案正在生成,页面显示时没有错误。不幸的是,信息尚未显示,但必须能够解决。谢谢!