3

我正在尝试使用 javascript 或 JQuery 从客户端发送一个值到服务器(理想情况下发送到我的代码隐藏中的方法)。我正在使用 C# .net 4.0。

在我的客户端 JQuery 中,我有:

 $.post("test.aspx/testMethod",
        {
            name: "Donald Duck",
            city: "Duckburg"
        }
    );

在我的服务器端(test.aspx.cs)方法中,我有

  public void testMethod()
{
    string name = Request.Form("name");
    string city = Request.Form("city");
}

但是这样我得到一个编译错误:“不可调用的成员'System.Web.HttpRequest.Form'不能像方法一样使用。”

我该如何纠正这个问题?还是达到相同的目标?使用 $.ajax({...}) 不是一个选项,因为非静态方法需要该值。

4

5 回答 5

2

对此有一个非常简单的答案。在搜索了几十个相同的问题以及许多人提供过于复杂的 ajax 回发解决方案之后,我想出了这个。基本上是一个班轮。希望它可以帮助某人:

在您的 javascript 中,您只需调用该方法:

PageMethods.SomeMethod('test');

您的“SomeMethod”将是这样的方法背后的代码:

[WebMethod]
    public static string SomeMethod(string param1)
    {
        string result = "The test worked!";
        return result;
    }

规则:您必须使用 WebMethod 属性标识方法背后的代码。它必须是静态的。您必须在您的页面中注册一个脚本管理器,如下所示:

<asp:ScriptManager ID="MyScriptManager" runat="server" EnablePageMethods="true" />

由于我正在使用 aspx webforms 页面来执行一些非常简单的 javascript 功能,例如检索/存储地理位置,因此我根据需要将其放在 Form 元素中。

于 2014-08-24T20:57:24.213 回答
0

上面的代码的工作原理是它将一个值从客户端 javascript 传递到服务器端代码隐藏,但由于您丢失了它而无法使用该值。

需要对上述代码进行以下修改才能使用该值(本质上将其存储在单独的静态类中,直到需要)。

C# Default.aspx.cs(Default.aspx 后面的代码)

protected void Page_Load(object sender, EventArgs e)
{
    getText();
}

public void getText()
{
    if (HttpContext.Current.Request.Form.Keys.Count > 0)
    {   
        // Reset staticValue
        Class1.staticValue = "";

        Class1.staticValue = HttpContext.Current.Request.Form["MyString"];
    // Call Class1.staticValue anywhere else and you get expected answer= "fname=Henry"

    }
}

STATIC CLASS (App_Code/Class1.cs) - 另一个存储值的对象(否则 HttpContext 对象会将其从任何东西中删除)

public class Class1
{
    private static string myValue = "";
    public Class1()
    {
            //
        // TODO: Add constructor logic here
        //
    }

    public static string staticValue
    {
        get
        {
            return myValue;
        }

        set
        {
            myValue = value;
        }
    }
}
于 2013-01-24T16:08:31.883 回答
0

找到解决方案...(希望有人觉得它有用)

JAVA脚本

function myFunction() {

    var str= "fname=Henry&lname=Ford"; 
    log("MyString=" + str);
}

function log(message) {
    var client = new XMLHttpRequest();
    client.open("POST", "Default.aspx", true);  // Default.aspx being the page being posted to
    client.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    client.send(message);
}

C# Default.aspx.cs(Default.aspx 后面的代码)

protected void Page_Load(object sender, EventArgs e)
{
    getText();
}

public void getText()
{
    if (HttpContext.Current.Request.Form.Keys.Count > 0)
    {
        string code = HttpContext.Current.Request.Form["MyString"];
    // code = "fname=Henry"
    // For looping etc, see below
    }
}

你还能得到什么......

HttpContext.Current.Request.Form.Count       // 2
HttpContext.Current.Request.Form.Keys.Count  // 2

HttpContext.Current.Request.Form.AllKeys[0]  // "MyString"
HttpContext.Current.Request.Form.Keys[0]     // "MyString"
HttpContext.Current.Request.Form.AllKeys[1]  // "lname"
HttpContext.Current.Request.Form.Keys[1]     // "lname"

HttpContext.Current.Request.Form[0]      // "fname=Henry"
HttpContext.Current.Request.Form[1]      // "Ford"

循环键...

foreach (string key in Request.Form.Keys) 
  {
    DoSomething(Request.Form[key]);
  }
于 2013-01-24T11:10:24.793 回答
0

我不知道 Web 表单是否支持这种类型的 JSON 请求。我很久以前就尝试过,但那时我必须添加 asmx 文件。目前你有 WCF,但是如果你不想改变你的 webforms 项目并且仍然想要 restful api,那么合并 MVC 项目来完成你的 restful 任务。你不必改变一切,但它可以协同工作。这里是怎么解释的?

我不知道最新版本的 Web 窗体,但在 VS2012 之前,您不能对页面进行 ajax 类型调用。我所知道的。

如果需要任何进一步的细节,请告诉我。

于 2013-01-24T06:13:21.360 回答
0

你可以这样使用 - https://rvieiraweb.wordpress.com/2013/01/21/sumption-webservice-net-json-using-jquery/

试试看 :)

于 2013-01-23T15:42:43.250 回答