2011-04-21 96 views
5

我使用两个DataContext对象来返回单独的AsQueriable()数据集,然后使用linq连接两个。但是,当我将该组合数据集传递给视图时,数据构造完美地工作,我得到的错误'object'不包含'Name'的定义。'object'不包含'Name'的定义

在调试会话期间,我可以清楚地看到父级模型和foreach循环中的每个“项目”都具有可见/可访问的所有数据和键。我很困惑。

许多其他问题匹配此问题的stackoverflow.com上的a不能解决我的问题,因此将欣赏一组全新的眼睛,并希望解决这个问题。

非常感谢! - 代码时间:

的数据结构

 public ActionResult SplashImages() 
     { 
      var g = (from i in GetGallerySplash() join o in GetFestivals() on i.Festival equals o.ID orderby i.Rating descending select new {i.Photo, i.OwnedBy, i.Rating, o.Name }); 
      Response.ContentType = "text/xml"; 
      return View(g); 
     } 

     private IEnumerable<Gallery> GetGallerySplash() 
     { 
      GallerysDataContext gdc = new GallerysDataContext(); 
      return (from i in gdc.Galleries orderby i.Rating descending select i).Take(15).AsQueryable(); 
     } 

     private IEnumerable<Festival> GetFestivals() 
     { 
      FestivalsDataContext fdc = new FestivalsDataContext(); 
      return (from i in fdc.Festivals select i).AsQueryable(); 
     } 

VSExpress的错误画面: Exception screenshot

在溶液中的任何指导,将不胜感激。谢谢!

Ç

+0

[访问C#匿名类型对象](http://stackoverflow.com/questions/713521/accessing-c-sharp-anonymous-type-objects) – nawfal 2014-06-28 12:49:07

回答

4

我建议你创建一个模型来封装两个IEnumerable对象,例如

public class GalleryModel 
{ 
    public IEnumerable<Gallery> Galleries { get; set } 
    public IEnumerable<Festivals> Festivals { get; set; } 
} 

那么强烈键入您的视图以匹配模型

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

然后在你的模型,你可以输入,安全是指每个对象,例如

<% foreach (var t in Model.Galleries) ... 
+0

感谢Tobias86,我正要完成这个确切的方法,因为我看到了你的答案。你当然是完全正确的。我确实为组合数据集制作了一个新模型,现在这个页面运行得非常完美。非常感谢! – 2011-04-21 10:09:26

+1

很高兴能有所帮助。我们必须处理类似的情况,所以我一直在你去过的地方:) – tobias86 2011-04-21 10:11:47

+1

我相信这被称为** MVVM **('Model View ViewModel')设计模式。基本上,您在模型和视图之间添加了另一个图层 - 视图模型 - 使您可以更好地将模型封装为更易于查看的格式。许多使用MVVM模式的人在他们的项目中添加一个名为'ViewModels'的文件夹,模拟Model,View和Controller文件夹的用法,并将其所有ViewModel类放入其中。 – 2011-09-15 10:09:03

-1

试着改变你的for循环:

<% foreach (dynamic t in Model) { %> 

采用var导致被推断为objectt类型。

+2

如果'Model'不是'IEnumerable 'i宁愿去一个静态类型的版本,并介绍一个poco ...'动态'基本上是纯粹的反思! – 2011-04-21 09:54:00

+0

嗨马修,我已经应用了这一变化,不幸的是我仍然得到同样的错误。 – 2011-04-21 09:54:33

+0

问题是,匿名类型不会逃避操作方法的作用域,并且视图只知道Model作为类型对象。 – 2013-02-22 21:37:59

相关问题