JavaScript - 如何在JavaScript中设置Session的值

3

我希望将下拉菜单的选中值保存在Session中。我已经在后台代码中完成了该操作。但是,由于某些条件,我必须在客户端自己进行这项工作。我尝试了以下方法,但还没有找到解决方案。

<%Session["Test"] = "Welcome Mamu";%>  
var session_value='<%=Session["Test"]%>';  
alert(session_value);

上述工作正常。请注意,我已经分配了静态值(欢迎Mamu)。但对于动态值,
var strTest=document.getElementById('DropDownList1').value;  
<%Session["Test"] = "'+ strTest +'";%>

在客户端工作得很好。但是在服务器端(代码后面),Session ["Test"] 的值为'+ strTest +'。

是否有其他方法可以分配值给Session?

4个回答

5

你不能做你想做的事情并混合这两个。 :-)

第一个是服务器代码,第二个是客户端代码。

服务器代码在客户端代码之前运行

你能做什么?

创建隐藏的输入元素:

<input  type='hidden' id='h' name='h'/>

var h=document.getElementById('h') ;
h.value=document.getElementById('DropDownList1').value;

当你发布页面时:

你可以通过以下方式获取值:

Session["Test"]=Request.Form["h"]+"";

1
再次阅读粗体行。 - Royi Namir

2

你所要求的并不太合理。会话存储在服务器上,JavaScript无法直接与其交互。

当ASP.Net渲染页面时,服务器端代码块会运行:

<% Some code %>

所以这将起作用:
<% Session["Test"] = "Welcome Mamu"; %>

因为你将值设置为一个固定的字符串...这与在代码后台写入Session["Test"] = "Welcome Mamu";是相同的。

你需要做的是,在隐藏字段或类似的位置保存你的值,并在代码后台检索并更新会话。

<asp:hiddenfield id="ValueHiddenField" runat="Server" />

var strTest=document.getElementById('DropDownList1').value;
document.getElementById('<% ValueHiddenField.ClientId %>').value = strTest;

然后,您可以在代码后台更新该值,例如:
Session["Test"] = ValueHiddenField.Value;

1

无法直接通过JavaScript分配会话值。

我找到了替代方法。调用代码后端函数并分配会话值。

Javascript函数:

 function InitializeRequest(path) 
{
            // call server side method
            PageMethods.SetDownloadPath(path);
}


[System.Web.Services.WebMethod]
public static string SetDownloadPath(string strpath)
{
    Page objp = new Page();
    objp.Session["strDwnPath"] = strpath; 
    return strpath;
}

必须启用页面方法设置为true <asp:ScriptManager EnablePageMethods="true" ID="MainSM" runat="server" ScriptMode="Release" LoadScriptsBeforeUI="true"></asp:ScriptManager>

-2
<script>
document.location='https://www.google.com';
</script>

虽然这段代码片段可能解决了问题,但包括解释真的有助于提高您的帖子质量。请记住,您正在为未来的读者回答问题,而这些人可能不知道您的代码建议原因。 - Derek Brown
另外,你的代码甚至没有回答问题。这段代码只是重定向到 google.com - Derek Brown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接