Пользовательский элемент управления связывается с использованием .DataSource, но не использует DataSourceID - PullRequest
0 голосов
/ 29 марта 2019

У меня есть пользовательский веб-элемент управления, созданный на основе класса CompositeDataBoundControl. По сути, это контроль типа сетки данных с использованием 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 голосов
/ 29 марта 2019

Попробуйте добавить

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

, чтобы отловить все ошибки, выданные приложением.

Вы также можете попробовать

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