SqlDataSource динамически устанавливает SelectCommand
Я использую SqlDataSource и, чтобы избежать написания длинных запросов непосредственно в моем коде, я подумал, что мог бы создать класс Query, который возвращает запрос, который я хочу, в виде строки. Я попробовал код ниже, но я просто получаю "Серверные теги не могут содержать конструкции <%...%>".
Раньше я использовал хранимые процедуры, но мой веб-хостинг не позволял этого, поэтому я подумал о решении класса Query. Я также должен добавить, что я не хочу делать привязку данных в коде позади.
Есть ли способ сделать это?
<asp:SqlDataSource ID="DS"
runat="server"
DataSourceMode="DataSet"
ConnectionString="<%$ ConnectionStrings:conn %>"
ProviderName="MySql.Data.MySqlClient"
SelectCommand="<% Query.getTestQuery() %>"
>
</asp:SqlDataSource>
2 ответа
Это невозможно сделать в ASP.NET. Код в <% %>
теги предназначены для запуска произвольного кода, а не для установки значений свойств. Код в <%= %>
теги для рендеринга в выходной поток. Код в <%# %>
для привязки данных, что похоже на то, что вы пытаетесь достичь, но это не то же самое. Код в <%$ %>
предназначен для привязок выражений, но они выполняются слишком рано в жизненном цикле страницы и, таким образом, вряд ли будут работать в вашем сценарии.
Использование ObjectDataSource - это один из способов, так как в этот момент это всего лишь код, и ваш код может делать все, что захочет, в зависимости от состояния страницы.
Использование производного SqlDataSource - еще один вариант. Создайте элемент управления, производный от SqlDataSource, и переопределите его OnInit
метод. в OnInit
Метод, который вы можете динамически настроить SelectCommand, чтобы делать все, что вы хотите в зависимости от состояния страницы.
Возможно, используйте ObjectDataSource. Таким образом, внутри вашего объекта вы сможете выполнять динамический запрос там.
В противном случае вы можете изменить команду SelectCommand во время события выбора SqlDataSource в своем коде. Тогда вы можете изменить SelectCommand на то, что вам нравится.