我正在使用 SqlDataSource,为了避免直接在代码中编写长查询,我认为我可以创建一个 Query 类,它以字符串形式返回我想要的查询。我尝试了下面的代码,但我只是得到“服务器标记不能包含 <% ... %> 结构。”
在我使用存储过程之前,但我的虚拟主机不允许这样做,所以这就是我考虑查询类解决方案的时候。我还需要补充一点,我不想在代码隐藏中进行数据绑定(bind)。
有办法做到这一点吗?
<asp:SqlDataSource ID="DS"
runat="server"
DataSourceMode="DataSet"
ConnectionString="<%$ ConnectionStrings:conn %>"
ProviderName="MySql.Data.MySqlClient"
SelectCommand="<% Query.getTestQuery() %>"
>
</asp:SqlDataSource>
最佳答案
在 ASP.NET 中不可能执行此操作。代码在 <% %>
标签用于运行任意代码,而不是用于设置属性值。代码在 <%= %>
标签用于渲染到输出流。代码在 <%# %>
用于数据绑定(bind),这与您想要完成的任务类似,但并不相同。代码在 <%$ %>
用于表达式绑定(bind),但它们在页面生命周期中执行得太早,因此不太可能在您的场景中工作。
使用 ObjectDataSource 是一种方法,因为此时它只是代码,您的代码可以根据页面的状态执行任何操作。
使用派生的 SqlDataSource 是另一种选择。创建一个派生自 SqlDataSource 的控件并覆盖其 OnInit
方法。在 OnInit
方法,您可以根据页面的状态动态设置 SelectCommand 来执行您想要的操作。
关于asp.net - SqlDataSource动态设置SelectCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1193256/