首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新面板未更新

更新面板未更新
EN

Stack Overflow用户
提问于 2013-04-16 21:44:29
回答 1查看 423关注 0票数 1

这是我担心没有人能够回答的问题之一,但是问一下也没什么坏处!

我的ASP.NET页面上有很多UpdatePanels。当用户在特定字段中输入值时,会相应地启用或禁用其他控件。到目前为止,我添加的每个面板都工作得很好。

我的RadioButtonList有三个选项-是、否和未知。如果用户选择“是”,则UpdatePanel中的一个文本框应变为启用状态。实际发生的是它更新了.有时候。模式似乎是,当页面加载时,无论RadioButtonList中的哪个选项被选中,如果您将选项更改为其他选项,然后再更改回来,则不会触发UpdatePanel。例如,如果页面已加载,并且选择了Unknown,则将选择内容更改为“是”或“否”将正确地启用和禁用文本框(只要您愿意单击它们),但将选择内容更改为Unknown并不会禁用textbox。正如我所说的,无论页面加载时选择的值是什么,这种模式都是正确的。

更奇怪的是,如果我选择了不会触发更新的值,然后更改了一个完全不相关的控件中的值,该控件是另一个UpdatePanel的触发器,当第二个面板更新时,直到那个时候才更新的第一个面板也会更新。尽管我所有的updatepanels都设置为条件更新模式。

我在下面展示了我的代码。希望有人能给我指明正确的方向!

代码语言:javascript
复制
<tr class="grouprow">
    <td>Non-Abdominal Surgery In Last 6 Months?</td>
    <td><asp:RadioButtonList ID="rblRecentNonAbdominalSurgery" runat="server" RepeatDirection="Horizontal" SelectedValue='<%# Bind("AdmissionRecentNonAbdominalSurgery")%>' 
        CssClass="bottommargin" AutoPostBack="true" OnSelectedIndexChanged="rblRecentNonAbdominalSurgery_SelectedIndexChanged" ClientIDMode="AutoID" >
        <asp:ListItem Text="Unknown" Value="" />
        <asp:ListItem Text="Yes" Value="True" />
        <asp:ListItem Text="No" Value="False" />                                    
    </asp:RadioButtonList></td>
</tr>
<tr class="grouprow">
    <td>Non-Abdominal Surgery Description</td>
    <td><asp:UpdatePanel ID="updRecentNonAbdominalSurgery" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="rblRecentNonAbdominalSurgery" EventName="SelectedIndexChanged" />    
        </Triggers>
        <ContentTemplate>
            <asp:TextBox ID="txtRecentNonAbdominalSurgeryDescription" runat="server" Text='<%# Bind("AdmissionRecentNonAbdominalSurgeryDescription")%>' TextMode="MultiLine" 
                Rows="4" CssClass="multilinetextbox bottommargin" />
        </ContentTemplate>
    </asp:UpdatePanel></td>
</tr>

和后面的代码:

代码语言:javascript
复制
Dim rblPreviousColicSurgery As RadioButtonList = fvPreviousColic.FindControl("rblPreviousColicSurgery")
If rblPreviousColicSurgery.SelectedItem.Text = "Yes" Then
    txtPreviousColicSurgeryDescription.Enabled = True
Else
    txtPreviousColicSurgeryDescription.Enabled = False
End If
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-16 22:17:19

是的,我想出了这个修复方法,并且对它第一次起作用感到非常高兴!之所以会出现此问题,是因为当将RadioButtonList指定为UpdatePanel的异步触发器时,除了所选的项之外,还会在呈现页面时将执行异步回发的JavaScript代码添加到RadioButtonList中的每个项中。因此,我们需要手动将代码添加到该项目中。

我已经创建了一个类,并将这个sub添加到其中:

代码语言:javascript
复制
Public Shared Sub AddJavaScriptToItem(ByVal rbl As RadioButtonList, ByVal selectedindex As Integer)

    Dim clientid As String = rbl.ClientID
    rbl.SelectedItem.Attributes.Add("onclick", "javascript:setTimeout('__doPostBack(\'" & clientid & "$" & selectedindex & "\',\'\')',0)")

End Sub

然后,我可以很容易地从我的站点上任何加载了AysncPostbackTrigger的RadioButtonList的地方调用这个sub (例如,在FormView的DataBound事件中)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16038771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档