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

时间:2015-11-25 15:36:03

标签: c# asp.net json jqgrid ashx

我有一个在主页上显示jqGrid的C#Web窗体应用程序。我在jqGrid上挣扎了一段时间,因为它在从MediaCapture.StartPreviewToCustomSinkAsync() 继承的任何页面上返回“jqGrid不是函数”错误。

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

site.master

<%@ Register TagPrefix="My" TagName="GridControl" Src="~/UserControls/Grid.ascx"%> <My:GridControl ID ="gridControl" runat="server" /> 内部我有代码填充网格,从处理程序内的存储过程中获取数据:

Grid.ascx

我使用处理程序和Newtonsoft JSON.NET来避免json字符串长度错误。

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

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

现在,我想根据sqlCmd.Parameters.Add("@ProjNum", SqlDbType.Int).Value = DBNull.Value; 下拉列表中的值过滤结果。下拉列表也是从SQL调用填充的。但我的问题是如何从下拉列表中获取值到我的处理程序中?

我知道我可以做类似网址的内容:Default.aspx我刚刚对该值进行了硬编码,然后从Handler1.ashx?asgnID=19获取,但我仍然不知道如何传递该值

我还阅读了有关使用session的内容,并且我尝试在java按钮单击事件中从context.Request.QueryString传递ajax中的json字符串 - 这不起作用,因为处理程序最终被调用两次。我对这些东西有点绿,并希望有更好的选择。

1 个答案:

答案 0 :(得分:0)

如果有人遇到同样的问题,我会做以下事情来解决它:

创建一个从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"]);