我需要为我创建一个 WHERE 子句,LinqDataSource
这取决于当前登录的用户。当然,我可以在代码隐藏中访问当前登录的用户,我特别需要用户 ID 从数据库中仅获取属于他/她的数据。
当我将Where
属性添加到<asp:LinqDataSource />
标签时它工作正常,但由于服务器控件中不能有<% %>
标签,我尝试在数据绑定连接到我的数据源的 GridView 之前Where
在代码隐藏中设置属性。OnLoad
但是,在代码隐藏中设置属性时,似乎没有效果。当我在代码中手动(和静态)指定它时,它工作正常ascx
,但不是从代码隐藏。
我猜我在错误的顺序或错误的时间做事。我该怎么做呢?
更新:
想出了这个技巧。我使用一个虚拟标签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 的方式吗?