我需要为我的LinqDataSource
创建一个WHERE子句,这取决于当前登录的用户。当然,我可以在代码隐藏中访问当前登录的用户,我特别需要用户ID从数据库中仅提取属于他/她的数据。ASP.NET LinqDataSource WHERE子句
它正常工作时,我的Where
属性添加到<asp:LinqDataSource />
标签,但因为服务器控件不能在他们<% %>
标签,我试图在代码中设置隐藏的Where
属性,在OnLoad
,之前数据绑定在GridView它连接到我的数据源。
但是,在代码隐藏中设置属性时,它似乎没有效果。当我在ascx
代码中手动(和静态)指定它时,它工作正常,但不是来自代码隐藏。
我猜我正在做错误的顺序或错误的时间。我该怎么做呢?
UPDATE:
想出了这个黑客。我使用虚拟标签lblViewedUserID
和Visible="false"
来获取可以从中提取用户ID的控件。在数据绑定之前,我从代码隐藏中设置此标签的文本。
我还添加了<WhereParameters>
与<asp:ControlParameter />
与一堆属性。
<asp:LinqDataSource ID="dsLinqSource" AutoPage="true" AutoSort="true"
ContextTypeName="Ortrac.Common.Dbml.OrComDataContext"
EnableDelete="false" TableName="myTableName" EnableInsert="false"
EnableUpdate="false" runat="server" Select="new(Edited, Activity)"
Where="TheUserID.ToString().Equals(@ViewedUserID)"><%-- HACK! --%>
<WhereParameters>
<asp:ControlParameter Name="ViewedUserID" ControlID="lblViewedUserID"
Type="String" PropertyName="Text" />
</WhereParameters>
</asp:LinqDataSource>
<%-- Dummy label --%>
<asp:Label runat="server" ID="lblViewedUserID" Visible="false" />
这是真的如何编程ASP.NET吗?
你的方法为我节省了大量的时间,谢谢! – 2016-07-04 11:52:26