通过ajax从客户端调用它来执行C#方法

时间:2012-09-12 07:30:19

标签: c# javascript asp.net ajax webmethod

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

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>

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

4 个答案:

答案 0 :(得分:1)

您的方法中没有可能出现问题的返回,您的方法应如下所示

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

答案 1 :(得分:0)

我可以通过ajax请求看到一些错误:

  1. url参数值不是正确的网址。
  2. 您未正确分配OnSuccess方法。
  3. 尝试将其更改为:

    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
    ...
    

答案 2 :(得分:0)

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

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

在web方法中保留一个断点,看看内容是否传递给了web方法。

答案 3 :(得分:0)

网址和成功并不好看。

1 - 在ajax调用中,您不会将参数传递给success函数。它将通过c#中指定的webmethod返回一些内容。 您在数据适当性中指定数据,并将其用作传递给webmethod的参数。

2 - 您无法使用母版页调用webmethod,必须在您正在使用的页面中指定。 aspx文件不是主文件。 页面继承自master,但它不是master。是包含母版页文件规范的页面。

尝试这样来识别错误,这是为了查看返回的内容

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