2012-03-03 65 views
4

javascriptで隠しフィールドを変更し、そのコードビハインドでその変更された値を使用しようとしています。 HiddenField1の値が変更されたかどうかをチェックするためにPage_Loadにブレークポイントがありますが、ポストバック時には常に0のままです。C#コードビハインドでJavascriptがHiddenFieldの値を変更しない

<script type="text/javascript"> 
     $(document).ready(function() { 
     var hiddenControl = '<%= HiddenField1.ClientID %>'; 
     var s = $('#cbox'); 

     $("#cbox").combobox({ 
      selected: function (event, ui) { 
       alert(s.val()); 
       document.getElementById(hiddenControl).value = s.val(); 
       alert(document.getElementById(hiddenControl).value); 
      } 
     }); 
    }); 

    <asp:HiddenField ID="HiddenField1" runat="server" EnableViewState="False" Value="0" /> 

私はこれを動作させることができない場合、javascriptとc#codebehindの間で情報を渡す他の方法がありますか?

+0

ページライフサイクルの問題ですか? Page_PreRenderで値が更新されていますか? – Malk

+0

Page_PreRenderの値は依然としてデフォルト値の0です –

+0

生成されたHTMLを投稿できますか? – shanabus

答えて

0

のHiddenFieldのためのMSのドキュメント上の例をチェックしてください:このページの

Form1.HiddenField1.value = s.val(); 

ボトム - HTML隠れ変数に

<input id="hdName" runat="server" type="hidden" /> 

としてを使用して同じタスクを実行するhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hiddenfield.aspx

+0

それを試してみましたが、Form1は定義されていません。また、私はそれが重要ではないと思うので、私はIDでそれを参照し、それのために文書を検索している質問のコードです。 –

+1

フォームIDはフォーム1ですが、マスターページが含まれているため、より多くのネストが可能でしょうか? –

+0

このフィールドがform1にない可能性はありますか?これをサーバ上の何か他のものに設定することでこれをテストすることができますか(そしてそれを投稿してください) – shanabus

0

試して私たちはrunat = "server"を提供しています。サーバ側でこの変数にアクセスでき、hdName.Valueでサーバ側で値を取得できます。私たちがrunat = serverを与えたので、javascriptでhdName.ClientIDを提供する必要があると思っています。

document.getElementById('<%= hdName.ClientID %>').value 

これで問題が解決し、希望の結果が得られることを願っています。 ありがとう

+0

aspの隠しフィールドと同じ結果 –

+0

ページソースからコントロールの名前を確認し、ここでHTMLの隠しフィールドを共有してください。 –

1

あなたはHiddenFieldのクライアント側ClientIDに注意し、ポストバック中にRequest.Formコレクションサーバー側で対応する値を調べることができます。

この方法で、サーバーに送信された値を確認します。値が正しければ何かがProcessPostData (手動リセットまたは、例えば、フォームの組織の動的な変更を)妨げるため、問題が発生する可能性があります

それが全体のコードなしでの助言を与えることは難しいですが、私は言っていたものと一致しますEnableViewState = falseは驚くべきことです。

0

あなたは常にJavaスクリプトから値を格納するための設定getメソッドを使用することができますが... しかし、ここでそれを解決するためにいくつかの簡単な方法です...

ケース1 - コントロールがちょうど目的を格納するためのものである場合には、
ディスプレイを置く:そのスタイルには何もなく、コントロールの属性に visible = trueとします。

ケース2 - コントロールではなく

eg.. 

    <asp:textbox runat="server" ID="textbox1" Enabled="false"></asp:textbox> will not work 

    <asp:textbox runat="server" ID="textbox2" ReadOnly="true"></asp:textbox> will work 
0

の=「true」と表示されることになるが、無効モードで読み取り専用置く場合のUpdatePanel内のあなたのHiddenFieldを入れて、クライアントIDでのHiddenFieldを使用しています。

0

私の答えは、Button EventやPage_Loadのような背後にあるServer Side Codeに戻すことができる隠された変数/コントロールを取得したと似ています。しかし、ここにあります:

<asp:TextBox ID="hdnErrorMsg" ClientIDMode="Static" style="display: none;" runat="server"/> 

これはJavaScriptで設定することができ、Server Side Asp.NETに戻り、使用され、調べられます。それがクライアントに戻ったときにそれを保持したい場合は、必要なものだけを戻す必要があるかもしれません。私の場合、それはエラーメッセージでした。私はそれを保存して終了のためのASP.NETボタンのクリックイベントで停止することを望んだが、私はそれが再びそこになるだろうクライアントに戻ったときにエラーのものを戻す必要があった。

関連する問題