我使用的是SqlDataSource,为了避免直接在代码中编写冗长的查询,我想我可以创建一个Query类,将我想要的查询作为字符串返回。我尝试了下面的代码,但得到的结果是“服务器标签不能包含<% ... %>构造”。
之前我正在使用存储过程,但是我的虚拟主机不允许这样做,所以我就开始考虑Query类的解决方案了。我还需要补充的是,我不想在代码背后进行数据绑定。
有没有办法做到这一点?
<asp:SqlDataSource ID="DS"
runat="server"
DataSourceMode="DataSet"
ConnectionString="<%$ ConnectionStrings:conn %>"
ProviderName="MySql.Data.MySqlClient"
SelectCommand="<% Query.getTestQuery() %>"
>
</asp:SqlDataSource>发布于 2009-12-30 04:43:06
在ASP.NET中不可能做到这一点。<% %>标记中的代码是用来运行任意代码的,而不是用来设置属性值的。<%= %>标记中的代码用于呈现到输出流。<%# %>中的代码用于数据绑定,这与您试图实现的目标类似,但不同。<%$ %>中的代码用于表达式绑定,但它们在页面生命周期中执行得太早,因此不太可能在您的场景中工作。
在这里使用ObjectDataSource是一种方法,因为在这一点上它只是代码,并且您的代码可以根据页面的状态做任何它想做的事情。
使用派生的SqlDataSource是另一种选择。创建从SqlDataSource派生的控件并重写其OnInit方法。在OnInit方法中,您可以根据页面的状态动态地设置SelectCommand以执行任何您想要的操作。
发布于 2009-07-28 10:49:59
也许可以使用ObjectDataSource。这样,在您的对象中,您将能够在那里进行动态查询。
否则,您可以在代码隐藏中的SqlDataSource选择事件期间修改SelectCommand。然后,您可以将SelectCommand更改为您喜欢的任何内容。
https://stackoverflow.com/questions/1193256
复制相似问题