簡體   English   中英

WebMethod的ASPX代碼隱藏調用頁面客戶端腳本

[英]ASPX Codebehind call Page Client script from WebMethod

我有一個ASPX頁面,該頁面通過javascript函數內部的AJAX調用來調用服務器。 我需要處理通過其發送到服務器的(json)數據,然后將數據從服務器返回給客戶端,並使用參數調用函數。

我的ajax代碼

function () {
        var myVar= "ooooblah";

        $.ajax({
            type: "POST",
            url: "MyPage.aspx/TestFunc",
            data: "{val:'" + myVar + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: OnSuccess
    });
}

我在aspx.cs后面的代碼

[WebMethod]
public static void TestFunc(string val)
{
    //process code here
    Page.ClientScript.RegisterStartupScript(...); //tried using this but it don't work
}

我嘗試編譯時遇到的錯誤是:

錯誤CS0120非靜態字段,方法或屬性“ Control.Page”需要對象引用

錯誤CS0026關鍵字'this'在靜態屬性,靜態方法或靜態字段初始化程序中無效

是否需要將其放在Page_Load中? 不確定如何解決此問題

您將無法從C#調用javascript函數,因為這是“無狀態”(可以說)POST調用,並且該調用在頁面上下文之外運行。 該方法可以在任何其他類中,並且結果將相同, 您將無法訪問Controls數組或Page屬性,這就是該方法為static的原因

您可以做的是向OnSuccess函數添加一個更復雜的響應作為提示。 因此OnSuccess函數可以檢查:“嘿,如果我在響應中獲得ExtraArgsForMagicFunction屬性,則意味着我需要調用我的魔術函數”

在客戶端上

<script type="text/javascript">

    var myVar= "ooooblah";

    $.ajax({
        type: "POST",
        url: "WebMethodTest.aspx/TestFunc",
        data: "{val:'" + myVar + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: onSuccess
    });

    function onSuccess(data) {
        alert(data.d.MainResponse);

        if (data.d.ExtraArgsForMagicFunction) {
            magicFunction(data.d.ExtraArgsForMagicFunction)
        }
    }

    function magicFunction(args) {
        alert(args[0]);
    }
</script>

在服務器上

[Serializable]
public struct FuncResult
{
    public string MainResponse;
    public string[] ExtraArgsForMagicFunction;
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static FuncResult TestFunc(string val)
{
    return new FuncResult()
    {
        MainResponse = val + "Response",
        ExtraArgsForMagicFunction = new[] { "Some Extra Args" }
    };
}

如果您收到401,請使用jQuery AJAX“ 401(未經授權)”檢查ASP.NET調用WebMethod。

如果你想知道“為什么d ?” 檢查一下{“ d”:“”}在asp.net Web服務響應中是什么意思

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM