我使用EF 4,C#和MS会员提供商。
我有一个带有DataSource的GridView和一个EntityDataSource Web控件。
我想使用EntityDataSource过滤数据,过滤显示申请当前登录用户,此值应使用MS Memebership Provider(Membership.GetUser();)。
现在我不能在EntityDataSource中输入任何允许我点的那个参数(在Where /使用提供的参数自动生成Where表达式中)。
你有什么想法吗?
请提供一些代码示例。谢谢你的时间!
答案 0 :(得分: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;
}
第二种方法是创建自定义参数。如何执行此操作的示例显示为here。注意:该示例基于asp:SqlDataSource
,但如果您确保在EntityDataSource中使用WhereParameters
而不是SqlDataSource中的SelectParameters
,它也应该适用于EntityDataSource。