Autopostback仅在ASP.NET中首次使用?

时间:2012-03-29 08:07:27

标签: c# asp.net updatepanel autopostback

在这里,我使用一个单选按钮来计算两个文本框之间的日期差异,我在另一个文本框中显示它。它只是第一次工作时,我点击单选按钮后,它不工作..这里是我的代码

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

有什么建议吗?

3 个答案:

答案 0 :(得分:4)

它的发生是因为你只强制回发rdoDateRange ...而当点击其他rdoSpecifiedDates时没有发生回发因此这就是为什么你rdoDateRange没有反映任何变化..

所以让rdoSpecifiedDates AutoPostBack = true。

嗯...要么你必须把两个rdobutton都放在你的触发器中......就像这样

   <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>

答案 1 :(得分: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)
        {

        }

答案 2 :(得分:1)

如果您的单选按钮位于更新面板之外(并且需要如此),则选中/选中的项目将永远不会因其<input>标记上没有任何JavaScript而触发,这在某种意义上是合乎逻辑的该页面认为该元素已被选中,为什么在点击它时需要重新启动回服务器呢?

但它显然会导致这种情况出现问题,因为作为更新面板的触发器,它永远不会重新绘制&#34;本身反映所选项目已更改。

我的解决方法是#34;重绘&#34;单选按钮以及将它们放在他们自己的 <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>

对我而言,这对于我想要更新的更新面板中的单选按钮以外最干净的解决方案感觉如此。