为什么这个cshtml会导致编译错误?(CS1061)

本文关键字:错误 CS1061 编译 cshtml 为什么 | 更新日期: 2023-09-27 17:57:36

@{
    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>

被突出显示为错误的行是

@f.Title

如果你不能从代码中看到我正在尝试做什么-基本上有一个名为Film的数据库表,每个Film都有一个ID。我只想显示FilmID为1的电影的标题(这部电影存在,当我在webmatrix的数据库部分运行查询时,我得到了正确的结果(。我做错了什么?

为什么这个cshtml会导致编译错误?(CS1061)

如果将Query方法与Database助手一起使用,则会得到一个动态对象的集合作为回报。如果只想返回一行,则应该使用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

f将是一些动态类型匿名类型的列表。它不会有Title属性。要么考虑在cshtml中嵌入Page.Title,要么需要对列表中的每个结果进行迭代,并为每个元素编写一个<p />

你也可以使用QuerySingleSingle来获取电影(我选择单曲是因为你是根据ID查询的,查询应该只返回一个结果(:

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

我同意下面的答案。您可以使用foreach输出列表中的所有标题。但当前您正在尝试选择列表中不存在的属性。

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

这将工作,否则尝试使用

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

我个人会使用SingleOrDefault,因为它通常"更安全"。