将参数传递给 .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"]);
我有一个在主页上显示 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()
的上下文中提取 IDint ProjNum = Convert.ToInt32(context.Request["Id"]);