2014-04-09 55 views
0
@{ 
    Page.Title = "Book a showing"; 
    var db = Database.Open("calcinema"); 
    var f = db.Query("SELECT * FROM Film WHERE FilmID = 1;").ToList(); 
} 

<html> 
    <p> @f.Title </p> 
</html> 

行被突出顯示爲錯誤(CS1061)是爲什麼這個cshtml導致編譯錯誤?

@ f.Title

如果你不能從我所試圖做的代碼中看到的 - 基本上沒有一個名爲Film的數據庫表,每個Film都有一個ID。我只想顯示FilmID = 1的電影標題(這部電影存在,當我在webmatrix的數據庫部分運行查詢時,我得到了正確的結果)。我做錯了什麼?

+1

「不工作」你可以進入更多的細節? – zimdanen

+0

對不起,我很累,一直在這個網站上工作了很長時間。沒有意識到標題是多麼模糊!我將更新原始文章 – Lightspeed

+2

除了您遇到的問題之外,您應該在Controller中執行查詢並通過模型(即MVC)將數據傳遞給View。 如果支持查詢返回單個項目,則應該使用'.First()'而不是'.ToList()'。 –

回答

1

f將會列出一些動態類型 匿名類型 。它不會有Title屬性。要麼你正在考慮在cshtml中嵌入Page.Title,要麼你需要遍歷列表中的每個結果,併爲每個元素編寫一個<p />

您可能還可以使用QuerySingle Single 獲得電影(我選擇了單一的基於這樣的事實,你是基於查詢的ID和查詢應只返回一個結果):

var f = db.QuerySingle("Select * from film where filmid = 1"); 
+1

Database類上有一個方法用於返回一個結果:'QuerySingle'。應該用它來代替。而f不是一個匿名類型。這是一個動態類型 - 特別是DynamicRecord的實例 –

+0

@MikeBrind - 更新了更正。我錯過了這裏的WebMatrix配合。 –

0

我同意下面的答案。您可以使用foreach輸出列表中的所有標題。但是目前您正嘗試選擇列表中不存在的屬性。

foreach(var film in f) 
{ 
    <p> @f.Title </p> 
} 

這會工作,否則請嘗試使用

var f = db.Query("Select * from film where filmid = 1").SingleOrDefault(); 

我個人使用的SingleOrDefault,因爲它通常是 「更安全」。

+0

「以上答案」可能並不總是在上面! –

+0

我會出現這種情況大聲笑 – RyanCosans

1

如果將Query方法與數據庫幫助程序一起使用,則會返回一組動態對象。如果你只希望返回一行,你應該使用QuerySingle方法,而不是返回一個動態對象:

@{ 
    Page.Title = "Book a showing"; 
    var db = Database.Open("calcinema"); 
    var f = db.QuerySingle("SELECT * FROM Film WHERE FilmID = 1;"); 
} 

<html> 
    <p> @f.Title </p> 
</html> 

你可以閱讀更多有關數據庫輔助方法在這裏:http://www.asp.net/web-pages/tutorials/data/5-working-with-data和我寫的內容與方法並在這裏更詳細的返回類型:http://www.mikesdotnetting.com/Article/214/How-To-Check-If-A-Query-Returns-Data-In-ASP.NET-Web-Pages

相關問題