我正在编写一个显示许多不同图表的网页,使用AJAX从数据库中获取数据,使用谷歌图表显示信息。
有没有办法可以将存储过程名称从AJAX传递到webMetod背后的代码?目前我不得不为每个存储过程创建一个单独的webMethod,而我想只有一个方法来传递要调用的过程。
我尝试添加参数和数据,但无法使其正常工作。
我正在使用WCF服务从数据库中提取数据,这是我的WebMethod,您将看到存储的proc名称'GetChartDataConceptDoubleLayerComboTwoBars',我想将其作为参数传递。
[WebMethod]
public static List<ChartData> GetDoubleLayerChartTwoBars()
{
System.ServiceModel.BasicHttpBinding userHttpBinding = new System.ServiceModel.BasicHttpBinding();
userHttpBinding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
userHttpBinding.MaxReceivedMessageSize = int.MaxValue;
System.ServiceModel.EndpointAddress userHtpEndpointAddress = new System.ServiceModel.EndpointAddress(chartDataDoubleLayerFactoryURI);
ChartDataDoubleLayerTDFactory chartFactory = new ChartDataDoubleLayerTDFactory(userHttpBinding, userHtpEndpointAddress);
TDBindingList<ChartDataDoubleLayerTD> chartDataRaw = chartFactory.GetChartDataConceptDoubleLayerComboTwoBars();
List<ChartData> chartData = new List<ChartData>();
chartData = channelReportingSummary.getData(chartDataRaw);
chartFactory.Close();
return chartData;
}
这是Ajax
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
processData: false,
url: 'channelReportingSummary.aspx/GetDoubleLayerChartTwoBars',
dataType: 'json',
timeout: 120000,
async: false,
success: function(result) {
createDatatableCombo(result, data, options);
},
error: function(xhr) {
alert(xhr.responseText);
}
});
答案 0 :(得分:1)
您可以将“存储过程名称”作为查询参数添加到ajax url属性中。
url: 'channelReportingSummary.aspx/GetDoubleLayerChartTwoBars?storedProcName=GetChartDataConceptDoubleLayerComboTwoBars'
并在网络方法中访问它,如下所示
string storedProcName = HttpContext.Current.Request.QueryString [“storedProcName”];
使用storedProcName作为参数编写switch语句,并为每个存储的proc写一个case语句。使用这种方法,您可以避免为每个存储过程创建单独的Web方法,并且可以使用单个Web方法处理所有内容。
switch (storedProcName)
{
case "GetChartDataConceptDoubleLayerComboTwoBars":
{
TDBindingList<ChartDataDoubleLayerTD> chartDataRaw = chartFactory.GetChartDataConceptDoubleLayerComboTwoBars();
break;
}
default:
break;
}