2013-03-23 18 views
1

我有以下代碼。在JavaScript函數內如何修改會話變量

在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函數本身,我應該能夠修改會話變量。 而我不想使用提交按鈕。

回答

1

使用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); 
     } 


     } 
+0

Sunny正確回答了您的問題,並且應該有可接受的答案。 – nunzabar 2013-11-15 20:05:33

1

不,會話變量不能在客戶端直接修改,並期望在服務器上更改。至少,AJAX請求必須保持會話值。

並根據您當前的代碼,我不瞭解會話變量的意義。你只是用會話變量追加文本框的值並提交表單。

所以,這將是直接表態,而無需客戶端腳本,即,

//page_load 
{ 
    Session["Mytest"] = test; 
} 

//page_submit 
{ 
    Session["Mytest"] += txtName.text; 
} 
+0

代替了會話變量,我可以使用緩存,Cookie或視圖狀態。請參閱,我只想在用戶在文本框中輸入文本時保留值,即使用戶按f5,值也不應丟失。 – 2013-03-23 19:02:33

+0

在文本框onblur事件上,調用ajax方法將修改的值存儲在會話中。 – Sunny 2013-03-23 19:12:52

0

您可以通過

[HttpPost] 
public bool SetSessionAction(string param) 
{ 
    Session[sessionName] = param; 
    return true; 
} 

然後調用方法或操作使用$阿賈克斯或$。員額從參數定義裏面在MVC asp.net或行動Web方法和設置會話jQuery的。

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); 
      } 
     }); 

好運

相關問題