如何在 Asp.net C# 中调用 webmethod

     2023-05-08     153

关键词:

【中文标题】如何在 Asp.net C# 中调用 webmethod【英文标题】:How to call webmethod in Asp.net C# 【发布时间】:2013-10-07 06:11:15 【问题描述】:

我想使用下面的代码在asp.net c#应用程序中调用一个web方法

Jquery:

jQuery.ajax(
    url: 'AddToCart.aspx/AddTo_Cart',
    type: "POST",
    data: "'quantity' : " + total_qty + ",'itemId':" + itemId + "",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    beforeSend: function () 
                  alert("Start!!! ");
               ,
    success: function (data) 
                 alert("a");
              ,
    failure: function (msg)  alert("Sorry!!! "); 
    );

C# 代码:

[System.Web.Services.WebMethod]
public static string AddTo_Cart(int quantity, int itemId)

    SpiritsShared.ShoppingCart.AddItem(itemId, quantity);      
    return "Add";

但它总是调用page_load。我该如何解决?

【问题讨论】:

你从哪里进行 ajax 调用? 很奇怪。调用谁的 page_load? AddToCart.aspx? 是的,调用 AddToCart.aspx/Page_load 【参考方案1】:

$.Ajax() 的很多元素如果定义不正确可能会导致问题。我建议以最基本的形式重写您的 javascript,您很可能会发现它工作正常。

脚本示例:

$.ajax(
    type: "POST",
    url: '/Default.aspx/TestMethod',
    data: 'message: "HAI" ',
    contentType: "application/json; charset=utf-8",
    success: function (data) 
        console.log(data);
    ,
    failure: function (response) 
        alert(response.d);
    
);

WebMethod 示例:

[WebMethod]
public static string TestMethod(string message)

     return "The message" + message;

【讨论】:

这是一个很好的起点。由于此示例有效,因此您可以将其一点一点地更改为您需要的内容,看看什么时候出了问题,然后您就知道问题出在哪里了。【参考方案2】:

这有点晚了,但我只是偶然发现了这个问题,试图解决我自己的这类问题。然后我意识到我在 ajax 帖子中的这一行是错误的:

data: "'quantity' : " + total_qty + ",'itemId':" + itemId + "",

应该是:

data: "quantity : '" + total_qty + "',itemId: '" + itemId + "'",

以及WebMethod:

public static string AddTo_Cart(string quantity, string itemId)

这解决了我的问题。

希望对其他人也有帮助。

【讨论】:

【参考方案3】:

解决这个问题 ;)

您需要更改作为字符串化 JSON 发送的数据,这样您就可以将 Ajax 调用模块化为一个可支持的函数。

第一步:提取数据构造

/***
 * This helper is used to call WebMethods from the page WebMethods.aspx
 * 
 * @method - String value; the name of the Web Method to execute
 * @data - JSON Object; the JSON structure data to pass, it will be Stringified
 *      before sending
 * @beforeSend - Function(xhr, sett)
 * @success - Function(data, status, xhr)
 * @error - Function(xhr, status, err)
 */
function AddToCartAjax(method, data, beforeSend, success, error) 
    $.ajax(
        url: 'AddToCart.aspx/', + method,
        data: JSON.stringify(data),
        type: "POST",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        beforeSend: beforeSend,
        success: success,
        error: error
    )

第二步:泛化WebMethod

[WebMethod]
public static string AddTo_Cart ( object items ) 
    var js = new JavaScriptSerializer();
    var json = js.ConvertToType<Dictionary<string , int>>( items );

    SpiritsShared.ShoppingCart.AddItem(json["itemId"], json["quantity"]);      
    return "Add";

第三步:在需要的地方调用它

这几乎可以在任何地方调用,JS 文件、HTML 文件或服务器端构造。

var items =  "quantity": total_qty, "itemId": itemId ;

AddToCartAjax("AddTo_Cart", items,
    function (xhr, sett)   // @beforeSend
        alert("Start!!!");
    , function (data, status, xhr)    // @success
        alert("a");
    , function(xhr, status, err)  // @error
        alert("Sorry!!!");
    );

【讨论】:

【参考方案4】:

这里的一个问题是,当您从 ajax 调用传递字符串时,您的方法需要 int 值。如有必要,尝试将其更改为字符串并在 web 方法中解析:

[System.Web.Services.WebMethod]
public static string AddTo_Cart(string quantity, string itemId)

    //parse parameters here
    SpiritsShared.ShoppingCart.AddItem(itemId, quantity);      
    return "Add";

编辑:或从 ajax 调用传递 int 参数。

【讨论】:

应该可以直接从ajax调用传递int值? @AlessioCavaleri 除非您在传递之前明确转换为 int 然后是,否则它会期望字符串值...【参考方案5】:

我不确定为什么这不起作用,它在我的测试中运行良好。但这里有一种替代技术可能会有所帮助。

不调用AJAX url中的方法,只需使用页面.aspx url,并将方法作为参数添加到数据对象中。然后当它调用 page_load 时,您的数据将在 Request.Form 变量中。

jQuery

jQuery.ajax(
    url: 'AddToCart.aspx',
    type: "POST",
    data: 
        method: 'AddTo_Cart', quantity: total_qty, itemId: itemId
    ,
    dataType: "json",
    beforeSend: function () 
        alert("Start!!! ");
    ,
    success: function (data) 
        alert("a");
    ,
    failure: function (msg)  alert("Sorry!!! "); 
);

C# 页面加载:

if (!Page.IsPostBack)

    if (Request.Form["method"] == "AddTo_Cart")
    
        int q, id;
        int.TryParse(Request.Form["quantity"], out q);
        int.TryParse(Request.Form["itemId"], out id);
        AddTo_Cart(q,id);
    

【讨论】:

虽然这种变通方法可以让你的代码正常工作,但这是一种糟糕的做法,当你不得不维持这种悲惨的混乱局面时,你未来的自己无疑会对你感到失望 我投了反对票,因为这是一个 hacky 工作,我认为不会帮助处于与 OP 相同情况的人们。【参考方案6】:

问题出在[System.Web.Services.WebMethod],添加[WebMethod(EnableSession = false)],您可以摆脱页面生命周期,默认情况下,EnableSession 在页面中为真,并通过生命周期事件使页面进入生命周期..

更多详情请参考以下页面 http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enablesessionstate.aspx

【讨论】:

【参考方案7】:

您需要在发送之前JSON.stringifydata parameter

【讨论】:

【参考方案8】:

这是你的答案。 使用

                   jquery.json-2.2.min.js 
                      and
                   jquery-1.8.3.min.js

Javascript:

function CallAddToCart(eitemId, equantity) 
   var itemId = Number(eitemId);
   var quantity = equantity;
   var dataValue = "itemId:'" + itemId+ "', quantity :'"+ quantity "'" ;
    $.ajax(
           url: "AddToCart.aspx/AddTo_Cart",
           type: "POST",
           dataType: "json",
           data: dataValue,
           contentType: "application/json; charset=utf-8",
           success: function (msg) 
                alert("Success");
           ,
           error: function ()  alert(arguments[2]);       
        );
 

你的 C# web 方法应该是

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string AddTo_Cart(int itemId, string quantity)

   SpiritsShared.ShoppingCart.AddItem(itemId, quantity);      
  return "Item Added Successfully";

从任何按钮click 或任何其他html 控件event,您可以使用参数调用javascript 方法,然后调用webmethod 以获取json 格式的值。

【讨论】:

如何从asp.net中的js函数调用c#函数?

】如何从asp.net中的js函数调用c#函数?【英文标题】:Howtocallc#functionfromjsfunctioninsideasp.net?【发布时间】:2017-08-1403:28:47【问题描述】:我正在使用asp.net和c#开发我的第一个网站。如何从asp.net中的js函数调用c#函数?我想将表单数... 查看详情

如何在 C# asp.net 中管理 Facebook api 响应数据?

】如何在C#asp.net中管理Facebookapi响应数据?【英文标题】:HowtomanageFacebookapiresponsedatainC#asp.net?【发布时间】:2011-08-0304:29:27【问题描述】:如何将facebookapi响应转换为用户可读的HTML格式?我调用图形apihttps://graph.facebook.com/me/feed?a... 查看详情

如何在 Asp.Net WebForm 中调用 Web API?

】如何在Asp.NetWebForm中调用WebAPI?【英文标题】:HowtoCallWebAPIinAsp.NetWebForm?【发布时间】:2020-10-1311:19:36【问题描述】:我想在C#中调用这个API,会传递相同的参数。在POSTMAN上运行良好;我只想从asp.netWebForm调用【问题讨论】:是... 查看详情

C# Asp net core 如何在控制器之外调用数据库上下文

】C#Aspnetcore如何在控制器之外调用数据库上下文【英文标题】:C#AspnetcoreHowtocalldatabasecontextoutsideofcontrollers【发布时间】:2021-10-2907:47:25【问题描述】:我有一个关于在控制器外使用数据库上下文的问题,即如何在常规类中调用... 查看详情

调试期间如何在 ASP.NET (C#) 中使用 Console.WriteLine?

】调试期间如何在ASP.NET(C#)中使用Console.WriteLine?【英文标题】:HowtouseConsole.WriteLineinASP.NET(C#)duringdebug?【发布时间】:2012-03-0807:30:06【问题描述】:我想在ASP.NET(C#)中将一些结果写入控制台。它在Window应用程序中工作,但在Web应... 查看详情

如何在 ASP.NET 中显示来自 C# 的警告框?

】如何在ASP.NET中显示来自C#的警告框?【英文标题】:HowtodisplayanalertboxfromC#inASP.NET?【发布时间】:2013-04-2812:56:19【问题描述】:我正在使用detail-view,并希望在我的代码块末尾显示一个警告框,上面写着:谢谢!您的数据已成... 查看详情

在 asp.net core 5 MVC 视图中从 C# 代码调用 JavaScript 函数

】在asp.netcore5MVC视图中从C#代码调用JavaScript函数【英文标题】:CallaJavaScriptfunctionfromC#codeinasp.netcore5MVCview【发布时间】:2021-07-1817:02:55【问题描述】:我正在处理Asp.netcore5MVC目标.Net5。我的views之一中有一个JavaScript函数,如果条... 查看详情

如何在 ASP.NET (C#) 中获取 DateRangePicker 控件值

】如何在ASP.NET(C#)中获取DateRangePicker控件值【英文标题】:HowtogetDateRangePickercontrolvalueinASP.NET(C#)【发布时间】:2017-05-2309:14:07【问题描述】:添加(runat="server")时,我可以获得控件名称“txtDate”,但它的磁盘播放类似于文本输入... 查看详情

如何使用c#在asp.net网页中显示C程序错误

】如何使用c#在asp.net网页中显示C程序错误【英文标题】:HowtodisplayCprogramerrorsinasp.netwebpageusingc#【发布时间】:2014-02-2510:46:29【问题描述】:我正在创建在线编译器应用程序。我已经用C#.net和VB.net成功创建了。但是当我尝试使用C... 查看详情

如何在asp.net c# web应用程序中使用asp.net vb页面

】如何在asp.netc#web应用程序中使用asp.netvb页面【英文标题】:Howtouseasp.netvbpagesinasp.netc#webapplication【发布时间】:2014-06-2604:45:53【问题描述】:我们已经用C#在ASP.NET上创建了我们的网站。但是另一位开发人员在VB.NET上创建了她的... 查看详情

如何在 c# asp.net 中使用完整的日历

】如何在c#asp.net中使用完整的日历【英文标题】:Howtousefullcalendarwithc#asp.net【发布时间】:2017-04-2211:48:26【问题描述】:我想通过创建Web服务来使用完整的日历i/o,但我没有在网上找到任何教程。我已经尝试搜索教程但没有成功... 查看详情

如何使用 c# 在 asp.net 中隐藏和显示警报

】如何使用c#在asp.net中隐藏和显示警报【英文标题】:Howtohideanddisplayalertinasp.netusingc#【发布时间】:2020-09-2608:16:00【问题描述】:所以我有一个简单的asp.net应用程序,当单击按钮时,我想根据用户的提交向用户发出成功警报或... 查看详情

如何使用 C# 在 ASP.NET 中使用 MySql 数据库 [重复]

】如何使用C#在ASP.NET中使用MySql数据库[重复]【英文标题】:HowtouseMySqldatatbaseinASP.NETusingC#[duplicate]【发布时间】:2014-03-1907:08:03【问题描述】:我正在使用C#在ASP.NET中使用MySql数据库。当我尝试连接到MySql的任何数据库时,它给出... 查看详情

如何使用 javascript 调用 ASP.NET c# 方法

】如何使用javascript调用ASP.NETc#方法【英文标题】:howtocallanASP.NETc#methodusingjavascript【发布时间】:2019-02-2801:05:37【问题描述】:有谁知道如何使用javascript调用服务器端c#方法?我需要做的是,如果选择取消,则停止导入,如果选... 查看详情

如何使用 javascript 调用 ASP.NET c# 方法

】如何使用javascript调用ASP.NETc#方法【英文标题】:howtocallanASP.NETc#methodusingjavascript【发布时间】:2011-10-2817:16:24【问题描述】:有谁知道如何使用javascript调用服务器端c#方法?我需要做的是如果选择取消则停止导入,或者如果选... 查看详情

jQuery 通过 Ajax 在 ASP.NET MVC C# 中调用 Action 方法

】jQuery通过Ajax在ASP.NETMVCC#中调用Action方法【英文标题】:jQuerytocallActionMethodinASP.NETMVCC#byAjax【发布时间】:2015-07-1922:03:01【问题描述】:我已经尝试了好几个小时来完成这项工作,我真的希望你们中的一个人比我更了解(非常多... 查看详情

如何在 C# 和 ASP.NET MVC 中读取/写入 cookie

】如何在C#和ASP.NETMVC中读取/写入cookie【英文标题】:Howcanread/writecookieinC#&ASP.NETMVC【发布时间】:2019-01-0518:00:44【问题描述】:我的cookie有问题,这是我在课堂上的读写代码:publicstaticclasslanguagepublicstaticvoidset_default(stringname)Ht... 查看详情

如何在 C# Asp.net 中将 SELECT sql 查询结果保存在数组中

】如何在C#Asp.net中将SELECTsql查询结果保存在数组中【英文标题】:HowtosaveSELECTsqlqueryresultsinanarrayinC#Asp.net【发布时间】:2013-12-0418:51:43【问题描述】:如何将SQL查询的结果保存到数组中?我想在IF语句中使用值(位于col1和col2中)... 查看详情