根据ajax调用结果设置会话变量

问题描述 投票:0回答:1

我想在代码后面设置一个会话变量,以便在收到基于设置会话变量的结果的ajax调用结果后。

此应用程序是旧的 Webform,不是 MVC 这就是我所做的

在我的独立 JS 中(尝试将我的值发布到同一个 aspx 页面,这是正确的

$(document).ready(function () {
     console.log("Document is ready.");
     $.ajax({
         type: "POST",
         url: "CheckBrowser.aspx/SetSessionVariable",
         data: JSON.stringify({ value: 'true' }),
         contentType: "application/json; charset=utf-8",
         dataType: "json",
         success: function (response) 
         {
             // Handle the server's response (if needed)
             console.log("success");
         },
         error: function (error) {
             console.log("AJAX Error: " + error);
         }
     }); 
}

test.aspx有这个JS 在 test.aspx.cs 中,我定义了该函数,这样我就可以使用下面的方法将我在 ajax 发布期间发送的 true 分配给我的会话变量

[WebMethod]
protected void SetSessionVariable(string data)
{
   Session["myTest"] = data;
}

我如何收到以下错误 未知的 Web 方法 SetSessionVariable [ArgumentException:未知的 Web 方法 SetSessionVariable。 参数名称:方法名] System.Web.Script.Services.WebServiceData.GetMethodData(字符串方法名称)+626166 System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(对象发送者,EventArgs eventArgs)+218 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +144 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep 步骤) +50 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤,布尔值&同步完成) +73'

如有任何建议,我们将不胜感激

c# asp.net ajax
1个回答
0
投票

好的,这里有几个问题,有些已在评论中指出。

首先:

您调用的 Web 方法必须是“静态”的。换句话说,该代码必须作为“独立”代码运行。此处没有创建页面类的实例(因此该 Web 方法无法引用给定页面上的控件)。

另外,由于web方法是静态的,并且“独立”于当前网页类实例,所以你必须引用不同的session[]。

最后但并非最不重要的一点:

如果您打开了友好的 URL,则必须更改路由页面,否则您的 Web 方法将不起作用。

所以,让我们在这里纠正一些细节。

所以,在aspx页面中,方法会这样定义:

 using System.Web.Services;   <--- don't forget this at top


    [WebMethod(enableSession: true)]
    public static void SetSessionVariable(string Value)
    {
        HttpContext.Current.Session["myTest"] = Value;
        Debug.Print("sesson value set");

    }

因此,您必须在上述编译器指令中启用会话。

并注意现在您必须如何使用当前的 Http 上下文才能使用会话。

客户端代码将与您一样多。

        <asp:Button ID="cmdTest" runat="server" Text="Set session value"
            CssClass="btn"
            OnClientClick="mytest();return false"
            />

        <script>

            function mytest() {

                $.ajax({
                    type: "POST",
                    url: "ActiveImage.aspx/SetSessionVariable",
                    data: JSON.stringify({ Value: 'true' }),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        // Handle the server's response (if needed)
                        console.log("success");
                    },
                    error: function (error) {
                        console.log("AJAX Error: " + error);
                    }
                }); 

            }

        </script>

因此,为了进行测试,我们不使用就绪页面。让我们让代码工作起来,然后“进展”到让此类代码在浏览器页面加载事件上运行。

好的,最后但并非最不重要的一点是,如果您使用友好的 URL,那么您需要打开 RouteConfig.cs,并设置 AutoRedirectMode = off。

 settings.AutoRedirectMode = RedirectMode.Off;

另请注意我如何使用“V”代替“v”来传递参数(“值”与“值”)。传递给 Web 方法的参数区分大小写,因此必须匹配。

© www.soinside.com 2019 - 2024. All rights reserved.