LinqDataSource
現在ログインしているユーザーに応じて、WHERE句を作成する必要があります。もちろん、コードビハインドで現在ログインしているユーザーにアクセスできます。特に、データベースからユーザーに属するデータのみをフェッチするには、ユーザー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をプログラムする方法ですか?