0
我有一個下拉菜單。我的目標是讓它在當前登錄的人是第一個列表中,隨後按字母順序排列:硬編碼字符串時查詢不起作用的SQLDataSourceParameter參數
<asp:DropDownList ID="userNameDropDown" runat="server" DataSourceID="SqlDataSource1"
DataTextField="Name" DataValueField="PK_User" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ApplicationServices %>"
SelectCommand="SELECT [PK_User], [Name] FROM [User] ORDER BY CASE WHEN [LoginName] = '@userLoggedIn' THEN 1 ELSE 2 END, [Name]">
<SelectParameters>
<asp:QueryStringParameter Name="userLoggedIn" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
這裏是我的C#應該設置參數:
protected void Page_Load(object sender, EventArgs e)
{
SqlDataSource1.SelectParameters["userLoggedIn"].DefaultValue = User.Identity.Name;
}
結果是列表按字母順序顯示,忽略登錄的人。如果我改變SelectCommand並使其硬編碼,它工作正常:
SelectCommand="SELECT [PK_User], [Name] FROM [User] ORDER BY CASE WHEN [LoginName] = 'tunnelld' THEN 1 ELSE 2 END, [Name]
在這種情況下,它正是我想要的。
System.Diagnostics.Debug.Write(User.Identity.Name);
結果的輸出:tunnelld
是否包裹你的在「if(!IsPostBack)」條件中的Page_Load代碼有什麼區別? –