【问题标题】:Executing a C# method by calling it from client-side by ajax通过ajax从客户端调用它来执行C#方法
【发布时间】:2012-09-12 07:30:18
【问题描述】:

我正在尝试使用这种技术执行服务器端方法:

Javascript Ajax 函数

function storeLocal(brand, type) {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: "{brand:'" + brand + "'}",
        url: "Jquery Site.Master/storeLocal",
        datatype: "json",
        success: OnSuccess(brand),
    });
}

function OnSuccess(brand) {
    alert(brand);
}

C#方法:

[WebMethod]
public static object storeLocal(string brand)
{
    HttpContext.Current.Session.Add("Brand", brand);
}

要执行的代码行是:

<li>
    <a class="strong" onclick="storeLocal('petzl','harness')" href="About.aspx">Harnesses</a>
</li>

但它没有正确执行我的代码中是否有任何特定错误? 我使用这种方法的原因是因为我想要一个小项目的动态菜单,并希望在会话中存储用户在会话中选择的特定“li”,以便我可以在重定向页面中加载内容。 非常感谢 阿德里安

【问题讨论】:

  • “打电话给他”? C# 没有性别 :)
  • @codingbiz:取决于 OP 的母语。例如在俄语中未定义的词性别是男性
  • 你的webmethod 没有返回任何东西.. ?
  • 我认为它在 url 中有一些东西,因为我在一个独立的 webfomr 上尝试它工作正常。不能与站点管理员一起使用吗?因为我需要将它与动态主菜单一起使用。

标签: c# javascript asp.net ajax webmethod


【解决方案1】:

你的方法没有返回可能是问题,你的方法应该如下所示

[WebMethod]
 public static object storeLocal(string brand)
 {
     HttpContext.Current.Session.Add("Brand", brand);
     return "value" +brand;
 }

【讨论】:

  • 最好在webmethod中添加Json作为返回类型:[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
【解决方案2】:

您的ajax 请求有几个错误:

  1. url 参数值不是正确的 URL。
  2. 您没有正确分配 OnSuccess 方法。

尝试将其更改为:

function storeLocal(brand, type) { 
    $.ajax({ 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        data: "{brand:'" + brand + "'}", 
        url: "ProperSiteUrl/storeLocal", 
        datatype: "json", 
        success: OnSuccess, 
    }); 
} 

而且您没有从您的 storeLocal 网络方法返回任何内容。尝试将其更改为:

 [WebMethod]  
 public static object storeLocal(string brand)  
 {  
     HttpContext.Current.Session.Add("Brand", brand);  
     return ...;
 } 

此外,您将 JSON 发送到服务器,但是,对于单个参数,您可能会发现将其作为键/值对发送更容易,例如

...
data: "brand=" + brand
...

【讨论】:

    【解决方案3】:

    我不确定您的代码是否正确!你已经给出了 href 和 onclick 并且页面可能会在 onclick ajax 事件完成之前导航到 about.aspx。

    尝试删除 href 或将 onclick 事件放在 href='javascript:storelocal()' 中并从 webmethod 返回值。

    在 webmethod 中保留一个断点并查看内容是否正在传递给 webmethod。

    【讨论】:

      【解决方案4】:

      网址和成功看起来不太好。

      1 - 在 ajax 调用中,您不会将参数传递给成功函数。它将由 c# 中指定的 webmethod 返回一些东西。 您在数据属性中指定数据,并将其用作传递给 web 方法的参数。

      2 - 您不能使用母版页调用 webmethod,它必须在您正在工作的页面中指定。 aspx 文件不是主文件。 该页面继承自 master,但它不是 master。是具有母版页文件规范的页面。

      试试这个来识别错误,看看返回什么

      error: function (error) {
          alert(JSON.stringify(error));
      }
      

      【讨论】:

      • 它是因为我在母版页中使用 web 方法会尝试错误部分
      猜你喜欢
      • 2014-06-06
      • 2012-05-18
      • 1970-01-01
      • 2010-11-26
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      相关资源
      最近更新 更多