2013-01-08 63 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 %>" />