runat = server容器内的GridView / ObjectDataSource不绑定
-
05-07-2019 - |
题
我有一个带有2个单选按钮的小型网页表单,称之为PickFromList和EnterValue。当选中PickFromList时,我想显示一个我已配置为绑定到ObjectDataSource的GridView。当选中EnterValue时,我希望GridView消失。
此表单使用表格进行布局,并希望根据适当的数据和用户输入隐藏/显示相应的行。
不幸的是,当trPickFromList2行指定id并且runat = <!>“server <!>”时,GridView不会绑定;属性。如果我删除id并且runat = <!>“; server <!>”;从trPickFromList2行成功绑定。
有什么想法吗?
<table id="tblOptions" runat="server">
<tr id="trPickFromList1" runat="server">
<td>
<asp:RadioButton ID="rbFromList" runat="server" GroupName="Selection"
Text="Get Data From Existing Item" AutoPostBack="True"
oncheckedchanged="rbromList_CheckedChanged" />
</td>
</tr>
<tr id="trPickFromList2" runat="server">
<td style="padding-left:20px">
<asp:GridView ID="gvList" runat="server" AutoGenerateColumns="False"
DataSourceID="odsList" Width="400px" onrowdatabound="gvList_RowDataBound">
<Columns>
...
</Columns>
</asp:GridView>
</td>
</tr>
<tr id="trEnterValue1" runat="server">
<td>
<asp:RadioButton ID="rbEnterValue" runat="server" GroupName="Selection"
Text="Create a New Item"
AutoPostBack="True"
oncheckedchanged="rbEntered_CheckedChanged" />
...
解决方案
为什么不用javascript显示/隐藏TR?这样你就不会遇到这个问题而且你会有一个响应更快的UI。
使用jQuery:
$( 'classOnShowRadioButton')。点击(函数(){ $( 'trToShow')显示()。 $( 'trToHide。')隐藏()。 });
然后显然对另一个单选按钮反向。
其他提示
我最终实施了 Wilco Bauwer的RowSelectorField控件来解决此问题。这不是一个完美的解决方案,因为控件会显示所选行的索引值而不是所选的数据键值;然而,它运作良好。
嗯......不太确定,但是有几次让我感到兴奋的是将AutoWireEvents设置为false,它位于<!> lt;%page /%<!> gt的顶部;部分。对不起,如果它没有帮助,但是这样的烦人和无足轻重的事情就是问题。
如果AutoWireEvents回答Joe建议不是问题,您也可以尝试从tr标签中删除runat = server,而是用占位符包装它们并使用占位符来控制可见性。 (注意,不要使用面板,因为它会导致无效的html)
不隶属于 StackOverflow