我需要爲我的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