2009-07-28 2 views
0

Я использую SqlDataSource и не записываю длинные запросы непосредственно в свой код. Я думал, что могу создать класс Query, который возвращает запрос, который я хочу в качестве строки. Я пробовал код ниже, но я просто получаю: «Теги сервера не могут содержать <% ...%> конструкций».SqlDataSource set SelectCommand dynamicly

До того, как я использовал хранимые процедуры, но мой веб-хостинг не позволяет этого, так вот, когда я думал о решении класса Query. Мне также нужно добавить, что я не хочу делать привязку данных в коде.

Есть ли способ сделать это?

<asp:SqlDataSource ID="DS" 
     runat="server" 
     DataSourceMode="DataSet" 
     ConnectionString="<%$ ConnectionStrings:conn %>" 
     ProviderName="MySql.Data.MySqlClient" 
     SelectCommand="<% Query.getTestQuery() %>" 
     > 
    </asp:SqlDataSource> 

ответ

0

Возможно использование объекта ObjectDataSource. Таким образом, внутри вашего объекта вы сможете выполнить свой динамический запрос.

В противном случае вы можете изменить SelectCommand во время выбора события SqlDataSource в коде. Затем вы можете изменить SelectCommand на все, что вам нравится.

1

Это невозможно сделать в ASP.NET. Код в <% %> теги предназначены для запуска произвольного кода, а не для задания значений свойств. Код в тегах <%= %> предназначен для рендеринга в выходной поток. Код в <%# %> предназначен для привязки данных, который похож на то, что вы пытаетесь выполнить, но это не то же самое. Код в <%$ %> предназначен для привязок к выражениям, но они слишком рано запускают жизненный цикл страницы и, следовательно, вряд ли будут работать в вашем сценарии.

Использование ObjectDataSource - один из способов перейти сюда, поскольку в этот момент это всего лишь код, и ваш код может делать все, что захочет, в зависимости от состояния страницы.

Использование другого SqlDataSource - это еще один вариант. Создайте элемент управления, который выводится из SqlDataSource и переопределяет его метод OnInit. В методе OnInit вы можете динамически настроить SelectCommand на то, что вы хотите, в зависимости от состояния страницы.