'object'不包含'Name'的定义

时间:2011-04-21 09:47:01

标签: c# asp.net-mvc-2 exception

我正在使用两个DataContext对象来返回单独的AsQueriable()数据集,然后使用linq连接两个。数据结构完美无缺,但是当我将组合数据集传递给视图时,我得到错误“对象”不包含“名称”的定义。

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

stackoverflow.com上与此问题相关的其他q& 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

非常感谢任何有关解决方案的指导。谢谢!

C

3 个答案:

答案 0 :(得分: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) ...

答案 1 :(得分:1)

您将返回匿名类型以在视图中显示,因此存在问题。看看这些问题:

您可以将您的匿名类型包装在实际类中,并使用强类型视图,或者使用一些动态魔法。链接的问题涵盖了这些主题。

答案 2 :(得分:-1)

尝试将for循环更改为:

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

使用var会导致t的类型被推断为object