1

我有一些 ASP.NET 代码要从我的数据库中获取。代码如下:

@{ //begin block

var appDb = Database.Open("apps");
var msg = "hi";
Layout = "~/Header.cshtml";
var queryStr = "SELECT * FROM Apps WHERE appid = '" + @Request.QueryString["id"] + "'";
foreach (var query in appDb.Query(queryStr)) { //begin foreach
    <img src="@query.pictureUrl" /><br>
    <h2 style="display:  inline;"></h2> <h3 style="display: inline;">by </h3>
   <p>

       </p>
} // end foreach
} // end block

但是,WebMatrix 说 //end foreach 是块的结尾,而不是 foreach 的结尾。它也出现了这个错误:

"}" expected at line 
<end of file, i'm only copying the errored block but for me it's line 19>
 at column 4

所以我修复了错误,你猜怎么着?它再次出现。再次修复,再次出现等等。

如何修复错误

4

1 回答 1

0

Razor 对打开的 HTML 标记与关闭的标记匹配很挑剔。错误消息并不总是那么有用,但您的问题是由于<br>标签未关闭造成的。您需要做的就是在其中添加一个“/”:

@{ 
var appDb = Database.Open("apps");
var msg = "hi";
Layout = "~/Header.cshtml";
var queryStr = "SELECT * FROM Apps WHERE appid = @0";
foreach (var query in appDb.Query(queryStr, Request.QueryString["id"])) { 
    <img src="@query.pictureUrl" /><br />
    <h2 style="display:  inline;"></h2> 
    <h3 style="display: inline;">by </h3>

    <p></p>
    } 
}

我还解决了 Rudis 对 SQL 注入的正当担忧,并将您的字符串连接替换为参数。顺便说一句,如果您只希望得到一行数据作为查询的结果,您应该使用 QuerySingle 而不是 Query:

@{ 
    var appDb = Database.Open("apps");
    var msg = "hi";
    Layout = "~/Header.cshtml";
    var queryStr = "SELECT * FROM Apps WHERE appid = @0";
    var record = appDb.QuerySingle(queryStr, Request.QueryString["id"]); 
    if(record != null){
        <img src="@record.pictureUrl" /><br />
        <h2 style="display:  inline;"></h2> 
        <h3 style="display: inline;">by </h3>

        <p></p>
    } 
}

您可以在此处了解有关在网页中管理数据的更多信息:http ://www.asp.net/web-pages/tutorials/data

于 2013-10-12T20:28:25.543 回答