【问题标题】:Formview control with table, controls in tr set to runat server do not insert带表格的 Formview 控件,tr 中的控件设置为 runat 服务器不插入
【发布时间】:2011-08-09 15:28:42
【问题描述】:

这是一个奇怪的情况。在我的FormView 控件中,我放置了一个<table> 用于布局。随着行 (<tr>) 我添加了 IDs 和 runat="server"。插入只保存了一些数据,我认为这很奇怪。我查看了为什么这些字段存储而其他字段没有存储,唯一的区别是我没有将IDs 或runat="server" 添加到<tr>s。删除“runat”允许插入正常工作。

我认为这与初始化行的方式与初始化控件或 FormView 的方式有关。任何想法为什么会发生这种情况?现在,我正在从表格行中删除 IDs。

【问题讨论】:

    标签: c# asp.net formview


    【解决方案1】:

    你的想法是正确的。

    FormView 只查看顶级控件。如果您将其中一个预期的输入控件嵌入到另一个服务器端控件中,FormView 将看不到它(它已隐藏在外部控件中)。即使在您的代码隐藏中,您也必须使用 FindControl 方法从服务器端 <tr> 获取输入标签

    因此,如果你有这个:

    <tr ID="row1" runat="server">
        <asp:TextBox ID="myTB" runat="server">12</asp:TextBox>
    </tr>
    

    FormView 唯一看到的是顶级元素(&lt;tr&gt;)。除非您这样做,否则您甚至不会在 代码隐藏 中看到 TextBox

    TextBox myTB = (TextBox)row1.FindControl("myTB");
    

    所以我的建议是去掉&lt;tr&gt; 元素中的“runat”和“ID”标签;由于它们仅用于显示目的,因此您在服务器端并不需要它们。

    我希望这能把事情弄清楚一点。

    【讨论】:

    • 还是要玩这个。我正在使用 tr 将该行设置为可见或不可见...取决于其他标准。但是,我仍然可以使用 FindControl 检查您提到的文本框。没有意识到关于顶级元素的那一点信息。
    • @MKenyonII 我很高兴能帮上忙(至少一点点)。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    相关资源
    最近更新 更多