将参数值传递给SqlDataSource ASP.NET User.Identity.Name

时间:2013-01-08 06:19:46

标签: c# asp.net parameter-passing sqldatasource

需要帮助!我无法解决为什么这不起作用。

页:

<asp:SqlDataSource ID="SelectUserInfo" runat="server" ConnectionString="<%$ ConnectionStrings:TradeRelay %>" SelectCommand="admin_userinfo" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:ControlParameter Name="suser" Type="String" DefaultValue="Anonymous" />
</SelectParameters>
</asp:SqlDataSource>

代码隐藏:

protected void Page_Init(object sender, EventArgs e)
{
    SelectUserInfo.SelectParameters["suser"].DefaultValue = User.Identity.Name;
}

错误:

  

无法在ControlParameter'suser'中找到控件'suserParam'

UPD:

ControlID="suserParam"

错了!谢谢!

3 个答案:

答案 0 :(得分:2)

我建议添加Hiddenfield控件并为其分配User.Identity.Name,然后让SelectUserInfoHiddenfield控件中获取参数值

顺便说一下,在你的代码中,我找不到任何名为suserParam

的控件
<asp:HiddenField runat="server" ID="suserParam"/>
<asp:SqlDataSource ID="SelectUserInfo" runat="server" ConnectionString="<%$ ConnectionStrings:TradeRelay %>" SelectCommand="admin_userinfo" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:ControlParameter ControlID="suserParam" Name="suser" Type="String" DefaultValue="Anonymous" />
</SelectParameters>
</asp:SqlDataSource>

这是背后的代码

protected void Page_Load(object sender, EventArgs e)
{
    suserParam.value = User.Identity.Name;
}

答案 1 :(得分:2)

您正在使用ControlParameter从页面上现有的控件中提取参数值。因此,在这种情况下,它会尝试查找ID为suserParam的控件并因无法找到而引发错误。

尝试使用普通参数(asp:Parameter)而不是ControlParameter。另一种方法是使用SessionParameter或编写自己的自定义参数(请参阅此SO问题:How to utilize ASP.NET current user name in SqlParameter without code-behind

答案 2 :(得分:0)

您可以将其直接包含为标准参数:

<asp:Parameter Name="suserParam" Type="String" DefaultValue="<%=User.Identity.Name %>" />