我有一个基于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,那么它可以完美工作的事实对我来说没有任何意义。对于在哪里进行调查的任何帮助,将不胜感激。
答案 0 :(得分:0)
尝试添加
protected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError(); //<-- here put a breakpoint
}
这将捕获应用程序引发的所有错误。
您也可以尝试
ConnectionString="<%= ConnectionStrings:Primary %>"