自定义控件使用.DataSource进行绑定,但不使用DataSourceID

时间:2019-03-29 14:41:06

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

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

<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,那么它可以完美工作的事实对我来说没有任何意义。对于在哪里进行调查的任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

尝试添加

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

这将捕获应用程序引发的所有错误。

您也可以尝试

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