我需要根据用户选择从下拉菜单中显示结果。菜单本身用" 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(); - &GT;必须先绑定数据源才能执行此操作。
我试过
</tr>
@foreach (var row in data)
{<tr>
<td>@row.columnname</td>
</tr>
}
也没有工作。 - &GT; NullOperation异常
我用Google搜索了整整一周并进行了大量失败的实验。我现在已经结束了;专业的帮助将不胜感激。谢谢......
答案 0 :(得分:0)
在代码的第一部分中,您为数据声明了一个变量,但根本不查询数据库。我不完全清楚你想要做什么,但如果你想用数据填充网格,你应该查询数据库:
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
- 告诉浏览器请求不同的页面。当您执行此操作时,将丢弃当前页面中的所有值 - 包括刚刚检索到的数据。