【问题标题】:Filter Data using EntityDataSource使用 EntityDataSource 过滤数据
【发布时间】:2011-03-28 08:02:09
【问题描述】:

我使用 EF 4、C# 和 MS Membership Provider。

我有一个带有 DataSource 的 GridView 和一个 EntityDataSource web 控件。

我想使用 EntityDataSource 过滤数据,过滤显示适用于当前登录用户,此值应使用 MS Memebership Provider ( Membership.GetUser(); )。

现在我无法在 EntityDataSource 中添加任何允许我加点的参数(在 Where/Automatically generate a Where expression using provided parameter 中)。

你有什么想法吗?

请给我一个代码示例。感谢您的宝贵时间!

【问题讨论】:

    标签: c# asp.net entity-framework entitydatasource


    【解决方案1】:

    您不能在标记中以声明方式将用户的身份直接绑定到 EntityDataSource。但基本上有两种解决方法:

    第一个比较简单,但需要代码隐藏。您可以使用通用 asp:Parameter 并在代码隐藏中将其值设置为用户身份:

    标记:

    <asp:EntityDataSource ID="MyEntityDataSource" runat="server" 
        ConnectionString="name=MyContext" 
        DefaultContainerName="MyContext" 
        EntitySetName="MyObjectSet" 
        AutoGenerateWhereClause="False"
        Where="it.Username = @Username" 
        <WhereParameters>
            <asp:Parameter Name="Username" Type="String" />
        </WhereParameters>
    </asp:EntityDataSource>
    

    代码隐藏:

    protected void Page_Load(object sender, EventArgs e)
    {
        MyEntityDataSource.WhereParameters["Username"].DefaultValue =
            User.Identity.Name;
    }
    

    第二种方法是创建一个自定义参数here 显示了如何执行此操作的示例。注意:该示例基于 asp:SqlDataSource,但如果您确保在 EntityDataSource 中使用 WhereParameters 而不是在 SqlDataSource 中使用 SelectParameters,它应该也适用于 EntityDataSource。

    【讨论】:

    • 感谢 Slauma,我听从了您的建议并实施了“自定义参数”。感谢您的宝贵时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 2013-08-19
    • 2013-09-29
    相关资源
    最近更新 更多