C# MVC3 Razor视图引擎

C# MVC3 Razor视图引擎,c#,asp.net-mvc-3,linq,linq-to-sql,razor,C#,Asp.net Mvc 3,Linq,Linq To Sql,Razor,我刚开始学习MVC3。已经在传统的ASP.NET中编写了一段时间,现在想转到MVC 有些我不理解的东西可能只是与传统ASP.NET中的用法不同 我正在尝试编写一个简单的新闻模块,它将显示新闻并允许为它们插入评论 第一步是,我在SQL server上创建了一个表: TblNews TBL分类 TBL建议 在Models文件夹中创建了Linq2SQL数据类,并将其命名为News.dbml 创建了Controller HomeController.cs和其中名为Index的方法。 像这样: publi

我刚开始学习MVC3。已经在传统的ASP.NET中编写了一段时间,现在想转到MVC

有些我不理解的东西可能只是与传统ASP.NET中的用法不同

我正在尝试编写一个简单的新闻模块,它将显示新闻并允许为它们插入评论

第一步是,我在SQL server上创建了一个表: TblNews TBL分类 TBL建议

在Models文件夹中创建了Linq2SQL数据类,并将其命名为News.dbml 创建了Controller 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>
这是我从表中获得的示例数据

当我运行页面时,它会给我错误消息:

'object' does not contain a definition for 'ID'
但当我将鼠标集中在item变量上时,它实际上包含:

{ ID = 4, Title = asd, Description = asd, Category = Test2 }
我还尝试将Linq查询作为列表返回,方法是在其末尾添加.ToList

有人能给我一些提示,让我走上正确的方向吗

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

多谢各位


另外,我正在使用Visual Studio 2012,您缺少视图顶部的模型声明,因此将默认键入object。当您执行item.ID时,您正在执行object.ID,这就是为什么它抱怨该对象不包含ID的定义

添加以下内容:

@model List<Models.NewsDataContext>
编辑:实际上,在您选择进入匿名类型的LINQ查询中,您必须使用一个具体的类才能在视图中使用它。下面假设您的TblNews对应于一个名为News的类:

然后将模型更改为:

@model List<News>

@user2110925在linq语句中,您需要选择into in TblNews类,将其更改为select new TblNews或该类被调用的任何内容,然后将您的模型更改为List或该类被调用的任何内容我并不真正理解关于我应该对应的类的这一部分。我怎么才能知道呢?我的表名是TblNews,但我真的不太了解这个类。在传统的ASP.NET中,我从来不用为表使用类型,只有在填充dropdownlist或类似的内容时才需要使用它们。现在我真的很困惑…:@我想你们班是TblNews。基本上,在NewsDataContext中,您将有一个DbSet是吗?这意味着您应该使用TblNews类。这并不特定于MVC,而是特定于使用ORM,如实体框架、linq to sql、nhibernate等。如果我使用linq to sql数据类模块,为什么要在NewsDataContext中使用DbSet?这是我不明白的…@user2110925啊,对不起,你肯定有一个与表对应的类。这是TblNews课程。用那个。
return View(Model.ToList());
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>