2012-02-24 26 views
0

私のHTML。aspポストバック問題とhtmlコントロール

<input id="rdb1" type="radio" name="rdbData" checked="checked" /> 
<input id="rdb2" type="radio" name="rdbData" /> 
<asp:Button ID="btnTest" runat="server" Text="Test" OnClick="btnTest_Click" /> 

ボタンのみasp:buttonですが、ページは私がチェックrdb2でボタンbtnTestをクリックすると、負荷RDB1がselected.Butであるnot.First時間がradio buttonsあり、ページが更新され、この私を防ぐbutton.To第一レディオを選択しますこのようなjqueryを試してください。 Document.readyインサイド :

var btnTest = "<%=btnTest.ClientID %>"; 
$('#' + btnTest).bind("click", function() { 
      if ($('#rdb1').attr("checked")) { 
       $('#rdb2').attr("checked", false); 
       $('#rdb1').attr("checked", true); 

      } 
      else { 
       $('#rdb1').attr("checked", false); 
       $('#rdb2').attr("checked", true); 
      } 
     }); 

しかし、そのwork.How我々はsituation.Whereのこのタイプを扱うことができない私はwrong.Anyのアイデアや任意のalternative.Thanksを取得しています。

+0

'bind()'イベントで 'e.preventDefault'を試してください – elclanrs

答えて

0

この要件をABSURDと繰り返します。とにかくコードを見ずに、サーバー側のコントロールを使用するように指示する方法はありますか。これは、箸などでコードを記述するようなものです。

<input id="rdb1" type="radio" name="rbdData" value="rbd1" <%= Rdb1Checked %> /> 
<input id="rdb2" type="radio" name="rbdData" value="rbd2" <%= Rdb2Checked %> /> 
<asp:Button ID="btnTest" runat="server" Text="Test" onclick="btnTest_Click" /> 

そして、背後にあるコード:彼らはこれらの要件を持っている理由

protected string Rdb1Checked 
{ 
    get 
    { 
     if (IsPostBack) 
     { 
      if (Request["rbdData"] == "rbd1") 
      { 
       return "checked"; 
      } 
      else 
      { 
       return ""; 
      } 
     } 

     return "checked"; 
    } 
} 

protected string Rdb2Checked 
{ 
    get 
    { 
     if (IsPostBack) 
     { 
      if (Request["rbdData"] == "rbd2") 
      { 
       return "checked"; 
      } 
      else 
      { 
       return ""; 
      } 
     } 

     return ""; 
    } 
} 

を掲載し

は、しかし、ちょうど練習として、私は以下のソリューションを提供します。クライアントIDを表示したくない場合は、ClientIDModeをStaticに設定し、自動生成IDを避けることができます。それらを完全に削除するには、それらをnullなどに設定します。Webフォームがラジオボタン用にレンダリングするものが好きでない場合は、サーバー側の入力を使用してもOKです。独自の要件は単純に意味をなさない。

0

シュリ​​ー

事実は(jQueryので追加された)クライアントのクリックは、サーバーへの呼び出しの前に実行されるということです。あなたはセレクチンを保持したい場合は、サーバーサイドのコントロールを使用してみてください:

<input id="rdb1" type="radio" name="rdbData" checked="true" runat="server" /> 
    <input id="rdb2" type="radio" name="rdbData" runat="server" /> 
    <asp:Button ID="btnTest" runat="server" Text="Test" OnClick="btnTest_Click" /> 

それはあなたのための作業を行う場合は、これを試してみてください。

希望します。

+0

私は' server side'のcontrol.Itsを使用することができません。私のプロジェクトの要求です。私が直面しているサンプルの問題です。 –

0

「テスト」ボタンをクリックすると、ページがサーバーにポストバックされ、サーバーが最初に読み込まれたかのように、すべてのクライアント側コントロールが再描画されます。ページ全体がリロードされるので、jQueryはコントロールの状態についても「忘れている」ので、そのアプローチも機能しません。これを防ぐ最も簡単な方法は、サーバー側でラジオボタンを確実に実行することです。たとえば:

<asp:RadioButton id="rdb1" Checked="True" GroupName="RadioGroup1" runat="server" /> 
<asp:RadioButton id="rdb2" GroupName="RadioGroup1" runat="server" /> 

+0

私は 'サーバー側 'コントロールを使用することができません。私のプロジェクトの需要です。私が直面しているサンプルの問題です。 –

+0

ボタンはサーバー側のコントロールであり、使用しています。 – Stilgar

+0

ヤッププロジェクトが大きく、プロジェクトの需要があります。ここにすべてのものを投稿することはできません。条件です。 –

1

これがリクエストの場合は、入力ラジオボタンが選択された状態を保持する隠しフィールド(サーバー側)があることをお勧めします(ユーザーがラジオボタンをクリックするとjqueryを使用して非表示フィールドを更新します)。ポストバックでは、隠しフィールドがrunat = "server"に設定されているので、その値(viewstate)は維持され、単にjqueryを使用して正しいラジオボタンを選択して設定することができます。それは理にかなっていますか ?

-1

どういう意味ですか?あなたは "サーブサイドコントロール"を使用できない、またはIDEがそれを許さないという要件を持っているとしますか?

ASP.NETでは、すべてのHTMLコントロールはサーバーコントロールから継承します。runat = "server"を追加するだけで、コードビハインドからそのコントロールにアクセスすることができます。ただし、通常のHTMLコントロールとしてページにレンダリングされます。

関連する問題