我刚开始学习MVC3。已经在传统的ASP.NET中编码了一段时间,现在想转向MVC。
我不理解的一些事情(可能只是在传统的ASP.NET中使用的方式不同)
我正在尝试编写一个简单的新闻模块,它将显示新闻并允许为他们插入评论。
所以第一步是,我在我的SQL服务器上创建了一个表: TblNews TblCategories TblComments
在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确实存在关联)
之后我将返回从查询中获得的数据。
在View i have:
中@{
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'
但是当我将鼠标放在“item”变量上时,它实际上包含:
{ ID = 4, Title = asd, Description = asd, Category = Test2 }
我还尝试通过在其末尾添加.ToList()来将Linq Query作为列表返回。
任何人都可以给我任何提示并让我走向正确的方向吗?
很抱歉,如果我解释错误的话。英语不是我的主要语言。 请询问您是否需要更多信息。
非常感谢。
P.S。我正在使用Visual Studio 2012
答案 0 :(得分:0)
您在视图顶部缺少模型声明,因此默认情况下会输入object
。当您执行item.ID
object.ID
时,这就是为什么它抱怨object
不包含ID
的定义
添加以下内容:
@model List<Models.NewsDataContext>
此外,请确保在返回模型之前通过调用.ToList()
评估 LINQ查询,这样在查看视图之前已经对数据库执行了查询:
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>