1

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

页:

<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'

升级版:

ControlID="suserParam"

错了!谢谢!

4

3 回答 3

2

我建议添加Hiddenfield控件并将其分配User.Identity.Name给它,然后从控件中SelectUserInfo获取参数值Hiddenfield

顺便说一句,在您的代码中,我没有找到任何带有名称的控件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;
}
于 2013-01-08T06:25:24.777 回答
2

您正在使用ControlParameter它从页面上现有的控件中提取参数值。所以在这种情况下,它试图找到带有 id 的控件suserParam并引发错误,因为它无法找到它。

尝试使用普通参数 ( asp:Parameter) 而不是 ControlParameter。另一种选择是使用SessionParameter或编写您自己的自定义参数(请参阅此 SO 问题:如何在没有代码隐藏的情况下在 SqlParameter 中使用 ASP.NET 当前用户名

于 2013-01-08T06:29:13.633 回答
-1

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

<asp:Parameter Name="suserParam" Type="String" DefaultValue="<%=User.Identity.Name %>" />
于 2016-09-09T13:22:39.263 回答