2013-02-26 225 views
1

我刚开始学习MVC3。已经在传统的ASP.NET编码一段时间了,现在想转移到MVC。MVC3剃刀视图引擎

有些事情,我不知道(可能只是被用于不同的则在传统的ASP.NET)

我试图写一个简单的新闻模块,将显示消息,并允许插入注释为他们。

所以第一步就是,我创建了SQL服务器上的一个表: TblNews TblCategories TblComments

在模型文件夹中创建

LINQ2SQL数据类,并将其命名News.dbml 创建控制器HomeController.cs和方法称为Index()。 这个样子的:

public ActionResult Index() 
     { 
      Models.NewsDataContext db = new Models.NewsDataContext(); 
      var Model = (from n in db.TblNews 
         select new 
         { 
          ID = n.ID, 
          Title = n.Title, 
          Description = n.Description, 
          Category = n.TblCategory.CategoryName 
         }); 

      return View(Model); 
     } 

正如你看到的我想选择所有的新闻和他们的类别名称(TblNews和TblCategories确实有它们之间的关系)

在那之后,我返回数据我从查询中获得。

在查看我有:

@{ 
    ViewBag.Title = "News Index Page"; 
} 

<table> 
    @foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       ID: @item.ID<br /> 
       Title: @item.Title<br /> 
       Description: @item.Description<br /> 
       Category: @item.Category 
      </td> 
     </tr> 
    } 
</table> 

应返回类似:

ID: 4 
Title: asd 
Description: asd 
Category: 2 

从表是我的样本数据。

当我运行网页它给了我错误消息:

'object' does not contain a definition for 'ID' 

但是当我关注我的鼠标“项”变量,它实际上包含:

{ ID = 4, Title = asd, Description = asd, Category = Test2 } 

我也试图返回的LINQ通过将.ToList()添加到列表的末尾来查询列表。

任何人都可以给我任何提示,让我走向正确的方向吗?

对不起,如果我解释不正确的东西。英语不是我的主要语言。 请询问您是否需要更多信息。

非常感谢。

P.S.我正在使用Visual Studio 2012

回答

0

您在视图顶部缺少模型声明,因此将默认输入object。当你做item.ID你正在做object.ID,这就是为什么它抱怨object不包含ID

定义添加以下内容:

@model List<Models.NewsDataContext> 

此外,还要确保你评估 LINQ查询通过在您返回Model之前调用.ToList(),这样在数据库碰撞视图之前已经对数据库执行了查询:

return View(Model.ToList()); 

编辑:其实,在你的LINQ查询中你选择了一个匿名类型,你必须使用一个具体的类来在你的视图中使用它。以下假定您的TblNews对应于一个名为News类:

var Model = (from n in db.TblNews 
        select new News //class name here 
        { 
         ID = n.ID, 
         Title = n.Title, 
         Description = n.Description, 
         Category = n.TblCategory.CategoryName 
        }); 

     return View(Model.ToList()); 

模型然后更改为:

@model List<News> 
+0

@ user2110925啊,你需要在你的LINQ语句来选择进入'TblNews'类,将其改为“选择新的TblNews”(或任何该类称为),然后将您的模型更改为'列表'(或任何该类被称为) – mattytommo 2013-02-26 11:25:47

+0

我真的不明白这一部分关于我应该的类相当于。 o_O 我怎么找到这个? 我的表名是TblNews,但我并不真正了解这个课程。 在传统的ASP.NET中我从来不需要使用表格的类型,我只有在我填充下拉列表或类似的东西时才使用它们。 现在我真的很困惑...... :( – 2013-02-26 11:35:56

+0

@ user2110925我觉得你的课是'TblNews'。基本上,在你的'NewsDataContext'中,你会有一个'DbSet '是啊?这意味着你应该使用'TblNews'类。这不是特定于MVC,它是特定于使用ORM,如实体框架,linq到sql,nhibernate等。 – mattytommo 2013-02-26 11:53:32