1

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

我不明白的一些事情(可能只是在传统 ASP.NET 中的使用方式不同)

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

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

在 Models 文件夹中创建 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 }

我还尝试通过将 .ToList() 添加到它的末尾来将 Linq Query 作为列表返回。

任何人都可以给我任何提示并让我进入正确的方向吗?

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

非常感谢。

PS 我正在使用 Visual Studio 2012

4

1 回答 1

0

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

添加以下内容:

@model List<Models.NewsDataContext>

此外,请确保通过在返回模型之前调用来评估LINQ 查询.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>
于 2013-02-26T11:13:13.840 回答