我想在代码后面设置一个会话变量,以便在收到基于设置会话变量的结果的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'
如有任何建议,我们将不胜感激
好的,这里有几个问题,有些已在评论中指出。
首先:
您调用的 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 方法的参数区分大小写,因此必须匹配。