2012-03-29 37 views
4

在这里,我用一个单选按钮来计算两个文本框之间的日期差异,我在另一个文本框中显示它。它只在第一次工作,当我单击单选按钮后,它不工作..这里是我的代码Autopostback只能在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

on page load首先清除文本框 – Ishan 2012-03-29 08:10:26

+0

难道你不能这样做所有的客户端吗? – SkonJeet 2012-03-29 08:16:50

+0

不工作意味着它不会在CheckedChanged上回发?你是否在Page_Load和CheckedChanged处理程序中使用了断点进行调试? – 2012-03-29 08:17:05

回答

4

它的发生,因为你正迫使只发布回rdoDateRange ......和其他rdoSpecifiedDates点击没有回发时发生所以这就是为什么你rdoDateRange剂量并不反映任何变化..

所以使rdoSpecifiedDates的AutoPostBack =真正。

嗯......要么你必须把两者rdobuttons在触发..这样

<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

把这两样收音机在这样的更新潘内尔按钮..

<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

给它,因为它不工作。第二次当我单击该单选按钮它甚至不会去rdoDateRange_CheckedChanged事件。 – bala3569 2012-03-29 11:57:20

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 2012-03-29 11:58:23

+0

@ bala3569当你只需点击第二个rarioButton就会更新。 – 2012-03-29 12:20:08

+0

@ bala3569顺便说一句,'ID =“rdoSpecifiedDates”'也需要一个自动回复,也许'OnCheckedChanged =“rdoDateRange_CheckedChanged”'甚至empyt尝试让我知道! – 2012-03-29 12:57:21

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> 

这种感觉对我来说,最干净的解决住房的单选按钮之外在更新面板中您想要刷新。

相关问题