ASP.NET Webforms-使用AJAX调用C#方法 [英] ASP.NET Webforms - Calling a C# method with AJAX
问题描述
我在aspx上有一个asp按钮:
I've an asp button on an aspx :
<asp:Button id="btnReport2" name="btnReport2" runat="server" class="gradientBlueBtn" Text="Show Report" OnClientClick="Alert();" ToolTip="Report"/>
如您所见,我正在调用一个使用AJAX调用C#方法的javascript函数.我正在这样做:
As you can see, I'm calling a javascript function which uses AJAX to call a C# method. I'm doing this way :
<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>
问题是,单击按钮时,总是收到错误消息.我在做错什么吗?
The thing is, I'm always getting the error message when I'm clicking on the button. Is there something I'm doing wrong?
C#方法.我已经设置了一个断点,以查看是否调用了该方法,但显然没有.
EDIT : The C# method. I've put a breakpoint to see if the method is called but apparently it isn't.
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]
装饰.因此,您的方法应为:
Your method must be declared as static
and decorated with [WebMethod]
. So, your method should be:
[WebMethod]
public static void GetReport()
{
// Your code here
}
For more information, please take a look at this post.
编辑!
我看到您在代码中使用了一些控件(例如txtInvoiceFrom
,txtInvoiceTo
).将方法设为static
后,将无法再访问这些控件.要解决此问题,请按照以下步骤操作(以txtInvoiceTo
为例):
I see you use some controls in your code (like txtInvoiceFrom
, txtInvoiceTo
). After making your method static
, you cannot access those controls anymore. To solve this problem, please follow these steps (take txtInvoiceTo
as an example):
- 不要使用
txtInvoiceTo.Text
或类似方法获取数据.将其作为参数传递. - 使用
jQuery
或其他方法(由您选择)从客户端获取txtInvoiceTo
数据,并将其传递给Ajax以发布到服务器. - 要通过
jQuery
获取txtInvoiceTo
数据,您可以执行以下操作:$('#<%= txtInvoiceTo.ClientID %>').val()
- Don't get data by using
txtInvoiceTo.Text
or something similar. Pass it as a parameter. - Get
txtInvoiceTo
data from client-side, usingjQuery
or something else (your choice), and pass it to the Ajax to post to server. - To get
txtInvoiceTo
data byjQuery
, you can do:$('#<%= txtInvoiceTo.ClientID %>').val()
这篇关于ASP.NET Webforms-使用AJAX调用C#方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!