2012-03-29 14 views
4

ここでは、ラジオボタンを使用して2つのテキストボックスの日付の差を計算しています。別のテキストボックスに表示しています。最初にラジオボタンをクリックしたときにのみ動作します。私のコード自動ポストバックはASP.NETで初めて動作しますか?

<asp:RadioButton ID="rdoSpecifiedDates" runat="server" class="bodycontent" GroupName="status"/> 
<asp:RadioButton ID="rdoDateRange" runat="server" class="bodycontent" 
GroupName="status" oncheckedchanged="rdoDateRange_CheckedChanged" AutoPostBack="true" 
/> 

<asp:UpdatePanel ID="Update" runat="server"> 
<ContentTemplate> 
<asp:TextBox ID="txtDays" runat="server" CssClass="bodycontent" MaxLength="6" ReadOnly="true"></asp:TextBox> 
</ContentTemplate> 
<Triggers> 
<asp:AsyncPostBackTrigger ControlID="rdoDateRange" /> 
</Triggers> 
</asp:UpdatePanel> 

protected void rdoDateRange_CheckedChanged(object sender, EventArgs e) 
     { 
      DateTime startdate=Convert.ToDateTime(txtOStartDate.Text); 
      DateTime enddate=Convert.ToDateTime(txtOEndDate.Text); 
      var result = (enddate - startdate).TotalDays; 
      txtDays.Text =Convert.ToString(result); 
     } 

任意の提案?

+0

ページの読み込み最初にテキストボックスをクリアします – Ishan

+0

これをすべてクライアントサイドで行うことはできませんか? – SkonJeet

+0

CheckedChangedでポストバックしないことを意味しますか? Page_LoadとCheckedChangedハンドラでブレークポイントでデバッグしましたか? –

答えて

4

あなただけの強制rdoDateRangeにポストバック...と他のrdoSpecifiedDatesは何のポストバックをクリックされていない場合

だからrdoSpecifiedDatesを作る..あなたは、任意の変更を反映するものではありませ用量rdoDateRange理由ですので、発生しているので、その出来事のAutoPostBack =本当。この

<asp:RadioButton ID="rdoSpecifiedDates" runat="server" AutoPostBack="true" class="bodycontent" GroupName="status" /> 
     <asp:RadioButton ID="rdoDateRange" runat="server" class="bodycontent" GroupName="status" 
      OnCheckedChanged="rdoDateRange_CheckedChanged" AutoPostBack="true" /> 
     <asp:UpdatePanel ID="Update" runat="server"> 
      <ContentTemplate> 
       <asp:TextBox ID="txtDays" runat="server" CssClass="bodycontent" MaxLength="6" ReadOnly="true"></asp:TextBox> 
      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="rdoDateRange" /> 
       <asp:AsyncPostBackTrigger ControlID="rdoSpecifiedDates" /> 
      </Triggers> 
     </asp:UpdatePanel> 

OR

のように、このような更新パンネルのラジオボタンの両方を入れ

うーん...あなたはあなたのトリガの両方でrdobuttonsを配置する必要がありますいずれか..

<asp:UpdatePanel ID="Update" runat="server"> 
      <ContentTemplate> 
       <asp:RadioButton ID="rdoSpecifiedDates" runat="server" AutoPostBack="true" class="bodycontent" 
        GroupName="status" /> 
       <asp:RadioButton ID="rdoDateRange" runat="server" class="bodycontent" GroupName="status" 
        OnCheckedChanged="rdoDateRange_CheckedChanged" AutoPostBack="true" /> 
       <asp:TextBox ID="txtDays" runat="server" CssClass="bodycontent" MaxLength="6" ReadOnly="true"></asp:TextBox> 
      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="rdoDateRange" />     
      </Triggers> 
     </asp:UpdatePanel> 
+0

それは動作していないようにしました.2回目に、ラジオボタンをクリックするとrdoDateRange_CheckedChangedイベントに行きません。 – bala3569

2

あなたもできる:..

<div> 

    <asp:RadioButton ID="rdoSpecifiedDates" runat="server" class="bodycontent" 
    GroupName="status" oncheckedchanged="rdoSpecifiedDates_CheckedChanged" AutoPostBack="true" /> 
    <asp:RadioButton ID="rdoDateRange" runat="server" class="bodycontent" GroupName="status" 
     OnCheckedChanged="rdoDateRange_CheckedChanged" AutoPostBack="true" /> 

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
    <asp:UpdatePanel ID="Update1" runat="server" UpdateMode="Conditional" > 

      <ContentTemplate> 
       <asp:TextBox ID="txtDays" runat="server" CssClass="bodycontent" MaxLength="6" Enable="False"></asp:TextBox> 
      </ContentTemplate> 
     </asp:UpdatePanel> 

    </div> 

そして

protected void rdoDateRange_CheckedChanged(object sender, EventArgs e) 
     { 
      DateTime startdate = DateTime.Now.AddHours(2); 
      DateTime enddate = DateTime.Now.AddHours(5); 
      TimeSpan result = enddate - startdate; 
      txtDays.Text = result.ToString(); 
      Update1.Update(); 
     } 
protected void rdoSpecifiedDates_CheckedChanged(object sender, EventArgs e) 
     { 

     } 
+0

いいえ動作していない – bala3569

+0

@ bala3569 2番目のrarioButtonをクリックするだけで、それが更新されます。 –

+0

@ bala3569ところで、 'ID = "rdoSpecifiedDates"'にも自動ポストバックが必要ですし、 'OnCheckedChanged = "rdoDateRange_CheckedChanged"' empytでも試してみてください! –

1

あなたのラジオボタンは、更新パネルの外にある(そしてそうする必要があります)場合は、選択/チェックした項目は論理的である、によりその<input>タグに任意のJavaScriptを持っていないに火は決してありませんページが要素が既に選択されていると考えているという意味で、クリックされたときになぜサーバーに戻る必要があるのでしょうか?

しかし、更新パネルのトリガとして、選択された項目が変更されたことを反映するために自身を再ペイントしないため、このシナリオでは明らかに問題が発生します。

このための私の回避策は自分の<asp:UpdatePanel>コントロールでそれらを持っていることによって、同様のラジオボタンを「再描画」することです。これは、ラジオボタン、筐体の外側にきれいなソリューションのように私には感じ

<asp:UpdatePanel ID="RadioButtonUpdate" runat="server"> 
    <ContentTemplate> 
     <asp:RadioButton ID="rdoSpecifiedDates" runat="server" class="bodycontent" 
      GroupName="status" OnCheckedChanged="rdoSpecifiedDates_CheckedChanged" AutoPostBack="true" /> 
     <asp:RadioButton ID="rdoDateRange" runat="server" class="bodycontent" 
      GroupName="status" OnCheckedChanged="rdoDateRange_CheckedChanged" AutoPostBack="true" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

<asp:UpdatePanel ID="Update" runat="server"> 
    <ContentTemplate> 
     <asp:TextBox ID="txtDays" runat="server" CssClass="bodycontent" MaxLength="6" ReadOnly="true"></asp:TextBox> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="rdoDateRange" /> 
    </Triggers> 
</asp:UpdatePanel> 

更新パネル内でリフレッシュする必要があります。