4

我使用 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 中)。

你有什么想法?

请给我一个代码示例。谢谢你的时间!

4

1 回答 1

11

您不能在标记中以声明方式将用户的身份直接绑定到 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;
}

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

于 2011-03-28T19:21:20.137 回答