【问题标题】:Custom control binds using .DataSource, but not using DataSourceID自定义控件使用 .DataSource 绑定,但不使用 DataSourceID
【发布时间】:2019-03-29 14:41:06
【问题描述】:

我有一个基于 CompositeDataBoundControl 类构建的自定义 Web 控件。它本质上是一个使用 boostrap 行列的数据网格类型控件。有一个名为 columns 的属性保存列。本质上它看起来像这样:

<cc:TableControl runat="server" id="tblControl">
    <Columns>
        <cc:TableColumn DataFieldName="field1" HeaderText="Field 1" />
        <cc:TableColumn DataFieldName="field2" HeaderText="Field 2" />
    </Columns>
</cc:TableControl>

如果我在代码隐藏中执行以下操作,则可以正常工作:

tblControl.DataSource = ds; // Connect to dataset
tblControl.DataBind();

但是,如果我这样做:

<cc:TableControl runat="server" id="tblControl" DataSourceID="myDS">
    <Columns>
        <cc:TableColumn DataFieldName="field1" HeaderText="Field 1" />
        <cc:TableColumn DataFieldName="field2" HeaderText="Field 2" />
    </Columns>
</cc:TableControl>
<asp:SqlDataSource runat="server" ID="myDS" 
     ConnectionString="<%$ ConnectionStrings:Primary %>" 
     SelectCommand="{sql here}"></asp:SqlDataSource>

它不仅不起作用,也不会抛出错误,我无法使用 F5 运行代码,但没有抛出或显示我可以找到的错误。它只是不运行服务器。它打开了我的浏览器,但我看不到该站点。如果我编译代码并在服务器上运行它,我会得到“无法访问此站点 - 连接已重置。”。它只发生在此页面上,不会发生在网站上的任何其他页面上。

如果我收到一条错误消息,我觉得我可以解决这个问题,但如果它在某处抛出错误,我将找不到它。

这很奇怪,因为我已经制作了基于 CompositeDataBoundControl 的其他自定义控件,它们与 DataSourceID 一起工作得很好。我能看到的唯一区别是在这个控件中我没有使用 ControlBuilder。但是,如果我在后端进行数据绑定但不使用 DataSourceID,它可以完美地工作这一事实对我来说没有意义。任何有关调查地点的帮助将不胜感激。

【问题讨论】:

    标签: c# asp.net data-binding custom-controls


    【解决方案1】:

    尝试添加

    protected void Application_Error(object sender, EventArgs e)
    {
        var exception = Server.GetLastError(); //<-- here put a breakpoint
    }
    

    这将捕获应用程序抛出的所有错误。

    你也可以试试

    ConnectionString="<%= ConnectionStrings:Primary %>"
    

    【讨论】:

    • 我在 global.asax 中已经有一个错误捕获器(有效:)),它可以通过电子邮件发送或写入日志文件,但它没有捕获任何东西。这是非常奇怪的事情之一!同样使用 = 而不是 $ 会给出“不支持关键字”消息。不过,谢谢。
    • @Eduardo,ConnectionStrings 是 web.config 中的类或属性吗?
    • 来自 web.config 的属性。我也确定这不是问题,因为我可以在其他地方使用相同的代码。实际上,如果我删除我的控件并使用具有相同 SqlDataSource 的数据网格,它就可以正常工作。因此,不幸的是,问题不在于 SqlDataSource - 这会使事情变得更容易。
    猜你喜欢
    • 2011-06-15
    • 2010-09-21
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 2012-01-28
    • 1970-01-01
    • 2012-04-29
    相关资源
    最近更新 更多