2013-01-08 166 views
1

需要帮助!我无法解决为什么这不起作用。将参数值传递给SqlDataSource ASP.NET User.Identity.Name

页:

<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; 
} 

错误:

Could not find control 'suserParam' in ControlParameter 'suser'

UPD:

ControlID="suserParam" 

是错的!谢谢!

+0

你指示'ControlParameter'找到它的值为ID ='suserParam'的控件 - 这就是它的抱怨 - 它找不到你在这里定义的控件。 –

回答

2

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

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

+0

谢谢! Works! – 84RR1573R

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; 
} 
+0

谢谢! 'suserParam'是我的不好。 – 84RR1573R

0

您可以直接把它作为一个标准的参数:

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