使用代码块选择User.Identify.Name

时间:2011-12-01 13:32:49

标签: c# asp.net .net

我的.aspx页面上有一个SqlDataSource SelectCommand。

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
     ConnectionString="<%$ ConnectionStrings:MyConnectionString %>"
     SelectCommand="SELECT * FROM [UserResult]"
     OnSelecting="SqlDataSource1_Selecting">
</asp:SqlDataSource>

此语句将从表UserResult中获取数据列表。

但是我只想列出属于用户的特定结果。

我在UserResult表中附加了一个username的列,我尝试形成这样的sql语句,但它似乎在搜索用户User.Identity.nAME

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
     ConnectionString="<%$ ConnectionStrings:SODConnectionString %>"
     SelectCommand="SELECT * FROM [UserResult] WHERE [username] LIKE 'User.Identity.Name'";"
     OnSelecting="SqlDataSource1_Selecting">
</asp:SqlDataSource>

我可以知道我该怎么做?

更新

从Curt的解决方案中,我尝试实现以下内容:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
     ConnectionString="<%$ ConnectionStrings:SODConnectionString %>"
     SelectCommand="SELECT * FROM [UserResult] WHERE [username]=@username"
     OnSelecting="SqlDataSource1_Selecting">
     <SelectParameters>
        <asp:Parameter Name="username" Type="String" DefaultValue='<%=User.Identity.Name %>' />
     </SelectParameters>
</asp:SqlDataSource>

但是我仍然无法根据用户名检索数据。

我尝试将用户名硬编码到username参数中并且有效:

任何人都可以提供帮助吗?

<asp:Parameter Name="username" Type="String" DefaultValue="james" />

2 个答案:

答案 0 :(得分:2)

您的陈述正在寻找User.Identity.Name,因为这是设置为字符串。

尝试使用代码块:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
     ConnectionString="<%$ ConnectionStrings:SODConnectionString %>"
     SelectCommand="SELECT * FROM [UserResult] WHERE [username]=@username"
     OnSelecting="SqlDataSource1_Selecting">
     <SelectParameters>
        <asp:Parameter Name="username" Type="String" DefaultValue='<%=User.Identity.Name %>' />
     </SelectParameters>
</asp:SqlDataSource>

Embedded Code Blocks in ASP.NET Web Pages

答案 1 :(得分:0)

没有必要在.aspx文件中声明默认值。您只能添加到文件后面的代码。

protected void Page_Init(object sender, EventArgs e)
{
    SqlDataSource1.InsertParameters["UserName"].DefaultValue = User.Identity.Name;
}