【问题标题】:ASPX Codebehind call Page Client script from WebMethodASPX Codebehind 从 WebMethod 调用页面客户端脚本
【发布时间】:2017-05-06 15:41:14
【问题描述】:

我有一个 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 的外面吗? 不知道如何解决这个问题

【问题讨论】:

    标签: javascript c# jquery asp.net ajax


    【解决方案1】:

    您将无法从 C# 调用 javascript 函数,因为这是一个“无状态”(可以说)POST 调用,并且该调用在页面上下文之外运行。该方法可以在任何其他类中并且结果将是相同的,您将无法访问 Controls 数组或 Page 属性,这就是该方法是静态的原因。

    您可以做的是添加一个更复杂的响应作为 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,请查看ASP.NET Calling WebMethod with jQuery AJAX "401 (Unauthorized)"

    如果您想知道“为什么选择d?”看看这个What does {"d":""} means in asp.net webservice response

    【讨论】:

    • 谢谢,但我认为您不理解我的问题...我能够从 JavaScript 转到 C#(代码隐藏)...我遇到的问题是调用一个单独的 javascript 函数当我在 C# 中时......我可以很好地取得成功
    • 谢谢,但我能够让 ajax 工作......原来我没有正确格式化 JSON 数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    相关资源
    最近更新 更多