WebMatrix-如何定义初始变量来保存数据库.query()返回结果而不超出范围或出现null类型异常错误
本文关键字:错误 范围 类型 null 结果 异常 query 定义 何定义 变量 WebMatrix- | 更新日期: 2023-09-27 18:25:54
我需要根据用户从下拉菜单中的选择显示结果。菜单本身是用"jobquery"动态填充的。
我写了以下代码:
@{
var db = Database.Open("database");
String jobquery = "select description from match_jobs";
IEnumerable<dynamic> data = null;
var grid = new WebGrid(data, canPage: false);
if(IsPost)
{
var description = Request["job"];
String sql = "select top 30 * from match_@0_output";
data = db.Query(sql, description);
}
}
然后在html中,我有
<div id="dynamic">
Select Job
<form name = "search" method="post">
<select name="job">
<option value="" selected disabled>Select Job</option>
@foreach (var row in db.Query(jobquery))
{
<option value="@Request["job"]">@row.description</option>
}
</select>
<input type="submit" value="@Request["job"]"/>
</form>
</div>
下拉菜单运行良好。但是,我无法打电话@grid.GetHtml();->必须先绑定数据源,然后才能执行此操作。
我试过
</tr>
@foreach (var row in data)
{<tr>
<td>@row.columnname</td>
</tr>
}
也没用。->空操作异常
我在谷歌上搜索了整整一周,做了很多失败的实验。现在我已经无计可施了;我们将非常感谢专家的帮助。非常感谢。
在代码的第一部分中,您为数据声明了一个变量,但根本不查询数据库。我不完全清楚你想做什么,但如果你想用数据填充网格,你应该查询数据库:
var db = Database.Open("database");
var jobquery = "select description from match_jobs";
var data = db.Query(jobquery);
var grid = new WebGrid(data, canPage: false);
然后在你的"html"中,你不需要再次查询数据库——你可以重用已经保存数据的变量:
<div id="dynamic">
Select Job
<form name = "search" method="post">
<select name="job">
<option value="" selected disabled>Select Job</option>
@foreach (var row in data)
{
<option value="@Request["job"]">@row.description</option>
}
</select>
<input type="submit" value="@Request["job"]"/>
</form>
</div>
IsPost
条件下的代码段根本没有意义。您查询数据库,然后调用Response.Redirect
,告诉浏览器请求不同的页面。执行此操作时,当前页面中的所有值(包括刚刚检索到的数据)都将被丢弃。