c# - ASP.NET LinqDataSource WHERE 子句

标签 c# asp.net gridview datasource linqdatasource

我需要为我的 LinqDataSource 创建一个 WHERE 子句这取决于当前登录的用户。当然,我可以在代码隐藏中访问当前登录的用户,我特别需要用户 ID 才能从数据库中仅获取属于他/她的数据。

当我添加 Where 时它工作正常属性为 <asp:LinqDataSource />标记,但由于服务器控件不能有 <% %>标签中,我尝试设置 Where代码隐藏中的属性,在 OnLoad 中,在对连接到我的数据源的 GridView 进行数据绑定(bind)之前。

但是在code-behind中设置属性的时候好像没有效果。当我在 ascx 中手动(和静态)指定它时它工作正常代码,但不是来自代码隐藏。

我猜我是在错误的顺序或错误的时间做事。我该怎么做?

更新:

想出了这个技巧。我使用虚拟标签 lblViewedUserIDVisible="false"获得一个我可以从中提取用户 ID 的控件。我在数据绑定(bind)之前从代码隐藏设置了这个标签的文本。

我还添加了 <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 程序的方式吗?

最佳答案

您发布的代码实际上是一种完全可以接受的方法。如果您需要经常这样做,您可以继承 Parameter 类来制作您自己的自定义参数。这是我们使用的:

public class CurrentUserIdParameter : System.Web.UI.WebControls.Parameter
{

    protected override int Evaluate(System.Web.HttpContext context, System.Web.UI.Control control)
    {
        if (Contact.Current == null) {
            return -1;
        }
        else {
            return Contact.Current.ContactID;
        }
    }
}

这在很多情况下都很有效——我们还有 CurrentLanguageIdParameter、CurrentInstanceIdParameter 等。

关于c# - ASP.NET LinqDataSource WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1930153/

相关文章:

c# - 在 itemTemplate 中查找标签并从后面的代码绑定(bind)数据

javascript - GridView 内的自动完成

c# - 来自嵌入图像的 BitmapSource

c# - ASP.NET 4.0 : datagrid uses control state or view state

C# 打印属性

C# : We application : Where to store generated PDF files?

asp.net - Windows身份验证下HttpContext.Current.User为null(集成管道)

c# - 使用 C#、asp.net 插入 Outlook 约会

javascript - 图片资源位置

c# - 无法获取 TextBox 值 OnRowUpdating