我有以下代码。
在asp.net中,我设置会话变量。然后将其传递给javascript进行修改。 在javascript中,我可以读取会话变量值并在TextBox1中返回修改后的值。 再次在asp.net中,我收到修改后的会话变量值并将其存储在会话变量中。
protected void Page_Load(object sender, EventArgs e)
{
Session["MyTest"] = "abcd";
String csname = "OnSubmitScript";
Type cstype = this.GetType();
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
// Check to see if the OnSubmit statement is already registered.
if (!cs.IsOnSubmitStatementRegistered(cstype, csname))
{
string cstext = " document.getElementById(\"TextBox1\").value = getMyvalSession() ; ";
cs.RegisterOnSubmitStatement(cstype, csname, cstext);
}
if (TextBox1.Text.Equals("")) { }
else {
Session["MyTest"] = TextBox1.Text;
}
}
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script language=javascript type="text/javascript">
function getMyvalSession() {
var txt = "efgh";
var ff = '<%=Session["MyTest"] %>' + txt;
return ff ;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack=true ></asp:TextBox>
<input type="submit" value="Submit" />
</div>
</form>
</body>
</html>
但我的目标是 - 在javascript函数本身我应该能够修改会话变量。 而且我不想使用提交按钮。
答案 0 :(得分:2)
使用cookie我可以保留价值。提交按钮也不是必需的。所以这段代码已经解决了我的目的。
<script language="javascript" type="text/javascript">
function writeCookie(name,value,days) {
var date, expires;
if (days) {
date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
expires = "; expires=" + date.toGMTString();
}else{
expires = "";
}
document.cookie = name + "=" + value + expires + "; path=/";
}
function readCookie(name) {
var i, c, ca, nameEQ = name + "=";
ca = document.cookie.split(';');
for (i = 0; i < ca.length; i++)
{
c = ca[i];
while (c.charAt(0)==' ') {
c = c.substring(1,c.length);
}
if (c.indexOf(nameEQ) == 0) {
return c.substring(nameEQ.length,c.length);
}
}
return '';
}
function restore(){
var sId = readCookie('sessionId');
document.getElementById("TextBox1").value = sId ;
}
function backup() {
var sId = document.getElementById("TextBox1").value;
writeCookie('sessionId', sId, 3);
}
function getMyvalSession() {
var ff = "Loading Value";
return ff;
}
function TextBox1_TextChanged() {
backup();
}
</script>
<body onload="restore()">
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" Name="TextBox1" runat="server"
AutoPostBack="True" onchange="TextBox1_TextChanged()" ></asp:TextBox>
</div>
</form>
</body>
protected void Page_Load(object sender, EventArgs e)
{
Loading();
}
void Loading (){
String csname = "OnSubmitScript";
Type cstype = this.GetType();
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
// Check to see if the OnSubmit statement is already registered.
if (!cs.IsOnSubmitStatementRegistered(cstype, csname))
{
string cstext = " document.getElementById(\"TextBox1\").value = getMyvalSession() ; ";
cs.RegisterOnSubmitStatement(cstype, csname, cstext);
}
}
答案 1 :(得分:1)
不,会话变量不能直接在客户端修改,并且期望在服务器上更改。至少,必须使AJAX请求持久化会话值。
根据您当前的代码,我不了解会话变量的意义。您只需在会话变量中附加文本框值并提交表单。
因此,它将是直接声明而不需要客户端脚本,即
//page_load
{
Session["Mytest"] = test;
}
//page_submit
{
Session["Mytest"] += txtName.text;
}
答案 2 :(得分:0)
您可以在asp.net中定义web方法或在MVC中定义动作,并在参数传递
中设置会话[HttpPost]
public bool SetSessionAction(string param)
{
Session[sessionName] = param;
return true;
}
然后使用来自jquery的$ .ajax或$ .post调用方法或操作。
var paramValue = 'some data';
var targetUrl = "@Url.Action("SetSessionAction", "ControllerName" )";
$.ajax({
type: "POST",
cache: false,
dataType: "json",
url: targetUrl,
data: { param: paramValue },
success: function (s) {
alert('Set Session is: ' + s);
}
});
祝你好运