我正在使用SqlDataSource并且为了避免在我的代码中直接编写长查询,我想我可以创建一个Query类,它返回我想要的查询字符串。我尝试了下面的代码,但我得到“服务器标签不能包含<%...%>构造”。
在我使用存储过程之前,但我的webhosting不允许这样做,所以当我考虑Query类解决方案时。我还需要补充一点,我不想在代码隐藏中进行数据绑定。
有没有办法做到这一点?
<asp:SqlDataSource ID="DS"
runat="server"
DataSourceMode="DataSet"
ConnectionString="<%$ ConnectionStrings:conn %>"
ProviderName="MySql.Data.MySqlClient"
SelectCommand="<% Query.getTestQuery() %>"
>
</asp:SqlDataSource>
答案 0 :(得分:1)
在ASP.NET中无法执行此操作。 <% %>
标记中的代码用于运行任意代码,而不是用于设置属性值。 <%= %>
标记中的代码用于呈现输出流。 <%# %>
中的代码用于数据绑定,类似于您要完成的操作,但它不一样。 <%$ %>
中的代码用于表达式绑定,但它们在页面的生命周期中执行得太早,因此不太适用于您的场景。
使用ObjectDataSource是一种方法,因为此时它只是代码,您的代码可以根据页面状态做任何想做的事情。
使用派生的SqlDataSource是另一种选择。创建一个派生自SqlDataSource的控件并覆盖其OnInit
方法。在OnInit
方法中,您可以根据页面状态动态设置SelectCommand以执行任何操作。
答案 1 :(得分:0)
也许使用ObjectDataSource。这样,在您的对象中,您就可以在那里进行动态查询。
否则,您可以在代码隐藏中的SqlDataSource选择事件期间修改SelectCommand。然后你可以将SelectCommand更改为你喜欢的任何内容。