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 на то, что вам нравится.

Другие вопросы по тегам