c# - ObjectDataSource 对注释掉的 GridView 有何 react ?

标签 c# asp.net gridview

我在asp.net的ObjectDataSource中遇到了一个非常奇怪的行为,要重现的描述有点长,所以请耐心等待我设置场景。

因此,想象一下用户控件中的一个简单的 ObjectDataSource/GridView 组合。 ObjectDataSource 调用一个返回对象列表的方法,GridView 以表格形式显示这些对象:

<div runat="server" ID="ControlWrapper">
    <asp:GridView ID="GridView1" AutoGenerateColumns="true" DataSourceID="ObjDataSource1" OnRowDataBound="GridView1_RowBound" runat="server">
    </asp:GridView>

</div>

<asp:ObjectDataSource ID="ObjDataSource1" runat="server" SelectMethod="GetBundle" OnSelecting="FixDataSource_Selecting"  OnSelected="FixDataSource_Selected"
    TypeName="West.VitalSigns.Contracts.ProdFixController">
</asp:ObjectDataSource>

这种方法几乎不需要后台代码中的任何内容。但假设我们要根据数据库的内容创建 n 个 GridView。所以我们在标记中注释掉GridView...

<div runat="server" ID="ControlWrapper">
<!--
<asp:GridView ID="GridView1" AutoGenerateColumns="true" DataSourceID="ObjDataSource1" OnRowDataBound="GridView1_RowBound" runat="server">
    </asp:GridView>
-->
</div>

...并将类似的内容添加到 ObjectDataSource 的 Selected 事件处理程序中:

protected void FixDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs args)
    {
        HashSet<string> components = new HashSet<string<()
        foreach (ProdFix fix in (List<ProdFix>)args.ReturnValue)
        {
            if (!components.Contains(fix.Component))
            {
                GridView v = new GridView();
                v.ID=fix.Component.Replace(" " ,"").Replace("-","");
                v.AutoGenerateColumns = true;
                v.DataSource = args.ReturnValue;
                v.RowDataBound +=new GridViewRowEventHandler(BundleGrid_RowBound);
                ControlWrapper.Controls.Add(v);
                components.Add(fix.Component);

            }
        }
    }

这段代码可以工作(或者至少未简化的版本可以在我的机器上工作),因此您决定从标记中删除注释掉的部分(毕竟不希望那些残渣残留在周围!)

<div runat="server" ID="ControlWrapper">

</div>

但是,当您执行此操作时,代码不再起作用! ObjectDataSource 将不会触发,这意味着 Selected 事件永远不会发生,这意味着您不会得到你的 GridView-s。看起来 ObjectDataSource 正在对 aspx 文件中的注释掉标记使用react?

所以,是这样的:

  • ASP.NET 中的错误?
  • 动态创建 GridView 的非标准方法?
  • 我根本不应该尝试的WTF?
  • 以上都是吗?

最佳答案

即使有注释,标记中的 gridview 控件也不会隐藏。 HTML 注释不适用于服务器端标记。使用服务器端注释代替:

<% /* %>     <% */ %>

<%-– and -–%> 

关于c# - ObjectDataSource 对注释掉的 GridView 有何 react ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/917297/

相关文章:

c# - 如果命名空间也被定义为默认值,则强制 XDocument 不使用命名空间前缀

asp.net - 带有 ASP.Net 的优雅语义 CSS 是否仍然是白日梦?

asp.net - 将用户重定向回原始页面

c# - 在 ASp.net 中动态添加数据到 gridview

c# Expression Lambda 从字符串到 Func<T>

c# - .NET Pop3 库的建议

c# - 使用 Asp.Net Core Cookie 身份验证的注销操作

c# - 有什么方法可以通过文本输入即时过滤 GridView 吗?

php - 如何在 yii2 GridView 中将两列相乘

c# - 如何在 C# 中使用 jquery ajax?