0

この質問に対する回答を読んで検索するのに数日かかりましたが、見つかりませんでした。

私はこのコードを使用しています

$('#Button1').click(function () {
            $.ajax({
                type: "POST",
                url: "/Default.aspx/ServerSideMethod",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                async: true,
                cache: false,
            })
            return false;
        });
        });

C# メソッドを呼び出してみる

[WebMethod]
 public void ServerSideMethod() {//Do something}

しかし、私はうまくいく解決策を見つけることができませんでした....

4

5 に答える 5

3

それが機能するためには、メソッドの場所urlが正しく設定されていること、およびメソッドにpublic次のような属性が追加されていることを確認してくださいstatic[WebMethod]

[WebMethod]
public static void doAll()
{
    //do something
}

が "/Default.aspx/ServerSideMethod"の場合url、メソッドは次のようになります。

[WebMethod]
public static void ServerSideMethod()
{
    //do something
}
于 2013-11-01T12:50:16.163 に答える
1

jsでこれを試してください:

$('#Button1').click(function () {
        // this calls default.aspx 
        $.ajax({
            type: "POST",
            url: '/Default.aspx',
            data: "{ServerSideMethod : '1'}", // send a parameter, to tell it what we want
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: true,
            cache: false,
            function(data){
                // data is json sent from server, if not, try $.parseJSON(data)
                // do something here after the server side code has finished
                if(data.ok){
                    //success from server side
                }
            }  
        });
        return false;
    });
    });

そして Default.aspx.cs で:

    // fires anytime default.aspx is loaded
    protected void Page_Load(object sender, EventArgs e)
    {
        // check if is ajax call and not normal page load in the browser
        if (Request.Headers["X-Requested-With"] == "XMLHttpRequest")
        {
             Response.Clear();  //empty everithing so we don't send mixed content
             // no cache on ajax, IE caches ajas if this is missing
             Response.Cache.SetExpires(DateTime.Today.AddMilliseconds(1.0));
             Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
             // here we are checking what we want to do, what client side asked
             if(!string.IsNullOrWhiteSpace(Request["ServerSideMethod"])) // this will be "1"
             {
                  doAll(); // do your work
             }
             Response.End();
        }
    }

    private void doAll() 
    {
            // do work, then send some json, as this is what you expect         
            // JavaScriptSerializer is located in System.Web.Script.Serialization
            Response.Write(new JavaScriptSerializer().Serialize(new { ok = 1, error = 0 }));
    }
于 2013-11-01T13:00:01.963 に答える
0

まず、デバッグ ステートメントを作成することをお勧めします。doAll() の最初の行に何らかの出力を書き込みます。実際、ブラウザからサーバーにリクエストを本当に送信しているかどうかがわかります。にサーバーへのリンクがあるかどうかを意味しますurl: "/Default.aspx/ServerSideMethod",。あなたは ajax 呼び出しを行っていると思いますが、サーバーをまったく起動していないか、この URL をメソッドにリンクするリスナーがありません。

于 2013-11-01T12:50:52.353 に答える
0

ajax から非静的メソッドを呼び出したい場合は、Web サービスを作成し、javascript から呼び出すことをお勧めします。Web サービス内に非静的メソッドを含めることができます。

javascript から Web サービスを呼び出す方法については、Stackoverflow に非常に多くの例があります。 JavaScript から ASP.NET Web サービス メソッドを呼び出す

于 2013-11-01T14:02:12.960 に答える
-1

asp.net マークアップ

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>


</head>
<body>
    <form id="form1" runat="server">
    <%--
     you can remove dropdown if asp.net Render __doPostBack already for You.
    --%>
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
        <asp:ListItem>1</asp:ListItem>
        <asp:ListItem>2</asp:ListItem>
    </asp:DropDownList>

    <input type="button" value="Click Me" onclick="__doPostBack('CallFromJavaScript','Message from JavaScript')" />

    </form>
</body>
</html>

コードビハインド。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
                string funcationName = Request.Params["__EVENTTARGET"];
                string org = Request.Params["__EVENTARGUMENT"];
                if (funcationName == "CallFromJavaScript")
                {
                    CallFromJavaScript(org);
                }
            }
        }


        protected void CallFromJavaScript(string Data)
        {
            Response.Write(DateTime.Now);
        }


    }
}

あなたのために完全なこのトリックのヘルプかもしれません

于 2013-11-01T14:34:04.527 に答える