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");
}

しかし、これでコンパイル エラーが発生します。

どうすればこれを修正できますか? それとも同じ目的を達成しますか?$.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

WebフォームがこのタイプのJSONリクエストをサポートしているかどうかはわかりません。ずっと前から試しましたが、その時にasmxファイルを追加する必要があります。現在WCFを使用していますが、Webフォームプロジェクトを変更せずにRESTful APIが必要な場合は、MVCプロジェクトをマージしてRESTfulタスクを実行してください。すべてをシフトする必要はありませんが、連携して機能します。ここではどのように説明されていますか?

最新バージョンのWebフォームについてはわかりませんが、VS2012より前では、ajaxタイプのページへの呼び出しを行うことはできません。私の知る限りでは。

さらに詳しい情報が必要な場合はお知らせください。

于 2013-01-24T06:13:21.360 に答える
0

このように使用できます-https://rvieiraweb.wordpress.com/2013/01/21/using-webservice-net-json-using-jquery/

それを試してみてください :)

于 2013-01-23T15:42:43.250 に答える
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

上記のコードは、クライアント側の 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 に答える