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>
    }

也没用。->空操作异常

我在谷歌上搜索了整整一周,做了很多失败的实验。现在我已经无计可施了;我们将非常感谢专家的帮助。非常感谢。

WebMatrix-如何定义初始变量来保存数据库.query()返回结果而不超出范围或出现null类型异常错误

在代码的第一部分中,您为数据声明了一个变量,但根本不查询数据库。我不完全清楚你想做什么,但如果你想用数据填充网格,你应该查询数据库:

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,告诉浏览器请求不同的页面。执行此操作时,当前页面中的所有值(包括刚刚检索到的数据)都将被丢弃。