2013-02-26 272 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