현재 LinqDataSource
에 대한 WHERE 절을 만들 필요가 있으며 현재 로그인 한 사용자에 따라 다릅니다. 물론, 코드 숨김에 현재 로그인 한 사용자에게 액세스 권한이 있으며 특히 데이터베이스에서 그/그녀에게 속한 데이터 만 가져 오기 위해 사용자 ID가 필요합니다.ASP.NET LinqDataSource WHERE 절
전에, 나는 <asp:LinqDataSource />
태그에 Where
속성을 추가하지만, 서버 컨트롤 그들에 <% %>
태그가 없기 때문에, 내가 OnLoad
에서 코드 숨김에서 Where
속성을 설정하려고 할 때 그것을 잘 작동 데이터 바인딩의 GridView를 내 데이터 소스에 연결되어 있습니다.
그러나 코드 숨김에 속성을 설정하면 아무 효과가없는 것 같습니다. 그것은 코드 백에서가 아니라 ascx
코드에서 수동으로 (그리고 정적으로) 지정할 때 잘 동작합니다.
내가 잘못된 순서로 또는 잘못된 시간에 일을하고 있다고 생각합니다. 어떻게해야합니까?
는 UPDATE :
이 해킹 함께했다. 나는 가짜 라벨 lblViewedUserID
과 Visible="false"
을 사용하여 사용자 ID를 추출 할 수있는 컨트롤을 얻습니다. 데이터 바인딩 전에 코드 숨김에서이 레이블의 텍스트를 설정합니다.
<asp:ControlParameter />
과 함께 <WhereParameters>
을 추가했습니다.
<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 프로그래밍 방식입니다.
귀하의 접근 방식은 나에게 많은 시간을 저장 등 CurrentLanguageIdParameter, CurrentInstanceIdParameter을 가지고, 감사합니다! –