我是C#Razor的新手,我想运行一个非常简单的过程 - 基本上我想运行一个新闻页面。如果页面链接包含ID,我希望页面根据该值查询数据库,例如:
var newsID = Request.QueryString["ID"]; var datanewsitem = db.QuerySingle("SELECT * FROM News WHERE ID=@0", newsID);
如果没有值,我希望它选择表中的顶级记录,如下所示:
var datanewsitem = db.QuerySingle("SELECT Top 1 ID, Title, Date, Text FROM news ORDER BY ID desc");
我正在尝试执行这样的检查:
if (Request.QueryString["ID"] != null) { var newsID = Request.QueryString["ID"]; var datanewsitem = db.QuerySingle("SELECT * FROM News WHERE ID=@0", newsID); }else{<br /> var datanewsitem = db.QuerySingle("SELECT Top 1 ID, Title, Date, Text, FROM news ORDER BY ID desc");}
但是,只要我尝试从IF语句中执行查询,编译器就会在我尝试调用它时告诉我datanewsitem.variable没有定义。
这可能是我理解C#如何工作的一个根本缺陷,但是有人可以为我提供解决方案(有一个例子)吗?这让我疯了!
答案 0 :(得分:0)
这很容易解决。
您在datanewsitem
和if
条款中分别定义了else
变量两次。这意味着它只在它所属的子句中定义(称为变量的“范围”。)
更改为:
myNewsType datanewsitem = null;
if (Request.QueryString["ID"] != null) {
newsID = Request.QueryString["ID"];
datanewsitem = db.QuerySingle("SELECT * FROM News WHERE ID=@0", newsID);
}else{<br />
datanewsitem = db.QuerySingle("SELECT Top 1 ID, Title, Date, Text, FROM news ORDER BY ID desc");}
...其中myNewsType
是datanewsitem
的类型名称。