将参数传递给 .ashx 中的 SQL 过程

Pass parameters to a SQL procedure in .ashx

我有一个在主页上显示 jqGrid 的 C# Web 窗体应用程序。我在 jqGrid 上挣扎了一段时间,因为它在从 site.master 继承的任何页面上 returning "jqGrid is not a function" 错误。

为了解决这个问题,我将网格的代码和脚本引用放在一个用户控件中,然后在主页上引用该控件:

<%@ Register TagPrefix="My" TagName="GridControl" Src="~/UserControls/Grid.ascx"%> 

<My:GridControl ID ="gridControl" runat="server" />

内部 Grid.ascx 我有填充网格的代码,它从处理程序内的存储过程获取数据:

    <script type="text/javascript">
    $(function () {
        $("#dataGrid").jqGrid({
            url: 'Handler1.ashx',
            datatype: 'json',

我将处理程序与 Newtonsoft JSON.NET 一起使用以避免 json 字符串长度错误。

存储过程有 11 个参数,当设置为 NULL 时,return 所有行,这是我想要的初始页面加载。

sqlCmd.Parameters.Add("@ProjNum", SqlDbType.Int).Value = DBNull.Value;

现在,我想根据 Default.aspx 上下拉列表中的值过滤结果。下拉列表也由 SQL 调用填充。但我的问题是如何从下拉列表中获取值到我的处理程序中?

我知道我可以做类似 url: Handler1.ashx?asgnID=19 的事情,我刚刚硬编码了值,然后从 context.Request.QueryString 中获取它,但我仍然没有知道如何传递值。

我也读过有关使用会话的内容,并且我尝试在 java 按钮单击事件中从 default.aspx 传递 ajax 中的 json 字符串 -这没有用,因为处理程序最终被调用了两次。我对这些东西有点陌生,希望有更好的选择。

如果有人遇到同样的问题,我执行了以下操作来解决它:

创建一个函数以从 url.

中提取参数
function GetParameterValues(param) {   
var url = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for (var i = 0; i < url.length; i++) {   
    var urlparam = url[i].split('=');   
    if (urlparam[0] == param) {   
        return urlparam[1];   
        }   
    }   
}   

将参数值赋给一个变量并在你的Jqgrid中使用它url:

$(function () {
var id = GetParameterValues('id');
$('#statusGrid').jqGrid({
    url: 'Handler2.ashx?id=' + id.toString(), 
    datatype: 'json',
    mtype: 'POST',

    colNames: ['Status', 'Status Date', 'Status Time',...

然后,在处理程序内部,从 ProcessRequest()

的上下文中提取 ID
int ProjNum = Convert.ToInt32(context.Request["Id"]);