我在aspx上有一个asp按钮:
<asp:Button id="btnReport2" name="btnReport2" runat="server" class="gradientBlueBtn" Text="Show Report" OnClientClick="Alert();" ToolTip="Report"/>
如您所见,我正在调用一个使用AJAX调用C#方法的javascript函数。我这样做:
<script> function Alert() { $.ajax({ type: "POST", url: "Selection.aspx/GetReport", contentType: 'application/json; charset=utf-8', dataType: 'json', success: function() { alert('success'); }, error: function() { alert('error'); } }); } </script>
问题是,单击按钮时,我总是收到错误消息。我做错什么了吗?
编辑:C#方法。我已经设置了一个断点,以查看是否调用了该方法,但显然没有。
public void GetReport() { AddFilters(); decimal localCurrencyRate; App_Data.BulkImportDSTableAdapters.ClientsTableAdapter tadptClients = new App_Data.BulkImportDSTableAdapters.ClientsTableAdapter(); string legalEntityID = string.Empty; if (txtSrcSys.Text != null) { DataTable dtSSYS = tadptClients.GetLegalEntityID(txtSrcSys.Text); if (dtSSYS.Rows.Count > 0) { legalEntityID = Convert.ToString(dtSSYS.Rows[0][0]); } } DateTime dtInvoiceFrom = DateTime.ParseExact(txtInvoiceFrom.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture); DateTime dtInvoiceTo = DateTime.ParseExact(txtInvoiceTo.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture); string strInvoiceFrom = String.Format("{0:yyyyMMdd}", dtInvoiceFrom); string strInvoiceTo = String.Format("{0:yyyyMMdd}", dtInvoiceTo); string localCurrency = dbcon.getLocalCurrency(legalEntityID); DataSet localCurrencyDs = dbcon.getCurrencyRate(localCurrency, strInvoiceFrom); if (Convert.ToDecimal(localCurrencyDs.Tables[0].Rows[0]["rate"]) == 0) localCurrencyRate = Convert.ToDecimal(localCurrencyDs.Tables[0].Rows[1]["rate"]); else localCurrencyRate = Convert.ToDecimal(localCurrencyDs.Tables[0].Rows[0]["rate"]); string fileQuery = string.Empty; if (cbxExpYes.Checked == true && cbxExpNo.Checked == false) { fileQuery = File.ReadAllText(Server.MapPath("~/temp/Query.txt")).Replace("{1}", "XFORM_AREA.IMPORT_GE_MAIN_V15BIS m"); fileQuery = fileQuery.Replace(":param1", localCurrencyRate.ToString()); fileQuery = fileQuery.Replace("{0}", qb.getFilters().Replace("P.", "m.")); } if (cbxExpYes.Checked == false && cbxExpNo.Checked == true) { fileQuery = File.ReadAllText(Server.MapPath("~/temp/Query.txt")).Replace("{1}", "PREIMPORT_GE_MAIN m"); fileQuery = fileQuery.Replace(":param1", localCurrencyRate.ToString()); fileQuery = fileQuery.Replace("{0}", qb.getFilters().Replace("P.", "m.")); } if (cbxExpYes.Checked == true && cbxExpNo.Checked == true) { fileQuery = File.ReadAllText(Server.MapPath("~/temp/QueryUnion.txt")); fileQuery = fileQuery.Replace("{ParamValues}", "pg.DEFVAL "); fileQuery = fileQuery.Replace("{ParamTab}", "ref_var_def pg"); fileQuery = fileQuery.Replace("{ParamCond}", "pg.NM = 'WL_REPORTING_CUR'"); fileQuery = fileQuery.Replace("{0}", qb.getFilters().Replace("P.", "m.")); fileQuery = fileQuery.Replace("{1}", qb.getFilters().Replace("P.", "i.")); } ASPxPivotGrid1.OptionsFilter.ShowOnlyAvailableItems = true; int indexTravFullName = 0; int indexEndTravFullName = 0; string paramToRemove = string.Empty; indexTravFullName = fileQuery.IndexOf("AND PR.ST_TRAVELLER_FULL_NAME LIKE"); if (indexTravFullName > 0) { indexEndTravFullName = fileQuery.Substring(indexTravFullName).IndexOf("AND", 3); paramToRemove = fileQuery.Substring(indexTravFullName, indexEndTravFullName); fileQuery = fileQuery.Replace(paramToRemove, string.Empty); } if (!string.IsNullOrEmpty(fileQuery)) { DataSet dsTravels = new DataSet(); oCmd.CommandText = fileQuery; oCmd.CommandType = CommandType.Text; oCmd.Connection = oConn; odpter.SelectCommand = oCmd; odpter.SelectCommand.Parameters.Add(":pSourceSystem", txtSrcSys.Text); odpter.SelectCommand.Parameters.Add(":pInvoiceFrom", strInvoiceFrom); odpter.SelectCommand.Parameters.Add(":pInvoiceTo", strInvoiceTo); if (!String.IsNullOrWhiteSpace(txtCustomNr.Text)) { odpter.SelectCommand.Parameters.Add(":pCustomerNr", txtCustomNr.Text); } if (!String.IsNullOrWhiteSpace(txtIATA.Text)) { odpter.SelectCommand.Parameters.Add(":Iata", txtIATA.Text); } if (!String.IsNullOrWhiteSpace(txtCurrCode.Text)) { odpter.SelectCommand.Parameters.Add(":CurrCode", txtCurrCode.Text); } if (!String.IsNullOrWhiteSpace(txtInvoiceNrFrom.Text)) { odpter.SelectCommand.Parameters.Add(":pInvoiceNrFrom", txtInvoiceNrFrom.Text); } if (!String.IsNullOrWhiteSpace(txtInvoiceNrTo.Text)) { odpter.SelectCommand.Parameters.Add(":pInvoiceNrTo", txtInvoiceNrTo.Text); } if (!String.IsNullOrWhiteSpace(txtDossierNrFrom.Text)) { odpter.SelectCommand.Parameters.Add(":pDossierNrFrom", txtInvoiceNrFrom.Text); } if (!String.IsNullOrWhiteSpace(txtDossierNrFrom.Text)) { odpter.SelectCommand.Parameters.Add(":pDossierNrTo", txtInvoiceNrFrom.Text); } if (!String.IsNullOrWhiteSpace(txtTravellerName.Text)) { odpter.SelectCommand.Parameters.Add(":pTravellerName", txtTravellerName.Text); } if (chbxSale.Checked) { odpter.SelectCommand.Parameters.Add(":pSale", "SA"); } if (chbxRefund.Checked) { odpter.SelectCommand.Parameters.Add(":pRefund", "RE"); } if (hfTravelWith.Value.Contains("chbxairs")) { odpter.SelectCommand.Parameters.Add(":pProductAir", "7"); } if (hfTravelWith.Value.Contains("chbxhotels")) { odpter.SelectCommand.Parameters.Add(":pProductHotel", "3"); } if (hfTravelWith.Value.Contains("chbxcars")) { odpter.SelectCommand.Parameters.Add(":pProductCar", "1"); } if (hfTravelWith.Value.Contains("chbxrails")) { odpter.SelectCommand.Parameters.Add(":pProductRail", "6"); } if (hfTravelWith.Value.Contains("chbxmisc")) { odpter.SelectCommand.Parameters.Add(":pProductMisc", "9"); } if (!String.IsNullOrWhiteSpace(txtBatchNr.Text)) { odpter.SelectCommand.Parameters.Add(":pBatchNr", txtBatchNr.Text); } odpter.MissingSchemaAction = MissingSchemaAction.AddWithKey; odpter.Fill(dsTravels, "ReportTab"); int count = dsTravels.Tables[0].Rows.Count; DataTable dt = dsTravels.Tables[0]; if (dt.Rows.Count > 0) { ASPxPivotGrid1.DataSource = dt; ASPxPivotGrid1.DataBind(); Session["dtReport"] = dt; //ASPxPivotGrid1.Prefilter.CriteriaString = "[" + "" + "]"; } } }
您的方法必须声明为,static并用修饰[WebMethod]。因此,您的方法应为:
static
[WebMethod]
[WebMethod] public static void GetReport() { // Your code here }
编辑!!!
我看你用一些控制在你的代码(如txtInvoiceFrom,txtInvoiceTo)。完成方法后static,您将无法再访问这些控件。要解决此问题,请按照以下步骤操作(以txtInvoiceTo示例为例):
txtInvoiceFrom
txtInvoiceTo
txtInvoiceTo.Text
jQuery
$('#<%= txtInvoiceTo.ClientID %>').val()