需要帮助!我无法解决为什么这不起作用。
页:
<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"
错了!谢谢!
答案 0 :(得分: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;
}
答案 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 %>" />