1

私は次のコードを持っています。

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関数自体の中で、セッション変数を変更できるはずです。そして、送信ボタンは使いたくありません。

4

3 に答える 3

2

クッキーを使用すると、値を保持できます。送信ボタンも必要ありません。したがって、このコードは私の目的を解決しました。

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


       }
于 2013-03-24T06:42:49.667 に答える
1

いいえ、セッション変数はクライアント側で直接変更することはできず、サーバーで変更されることを期待できます。少なくとも、セッション値を永続化するためにAJAXリクエストを行う必要があります。

そして、あなたの現在のコードに基づいて、私はセッション変数の重要性を理解していません。セッション変数を使用してテキストボックスの値を追加し、フォームを送信するだけです。

したがって、クライアント側のスクリプトを必要としない直接ステートメントになります。

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

//page_submit
{
   Session["Mytest"] += txtName.text;
}
于 2013-03-23T18:54:56.483 に答える
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);
            }
        });

幸運を

于 2013-11-15T19:53:29.270 に答える