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