2013-01-21 48 views
1

我剛剛學習asp.net,所以我可能會錯誤的如何我這樣做,讓我知道是否有更好的方法。使用基於用戶登錄的存儲過程填充下拉列表

我有一個「門戶」,用戶登錄,然後他們有一個他們管理的所有網站的下拉列表。

我想用一個存儲過程我創建了基於登錄的用戶來填充下拉框。

我用內置的CreateUserWizard存儲的用戶數據庫。我創建了另一個包含所有網站和第三個表格的網站,以將網站和用戶鏈接在一起。

這裏是下拉列表

<code> 

    <asp:DropDownList ID="DropDownListAClient" runat="server" 
     OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" 
     DataSourceID="SqlDataSourceSitePicker" DataTextField="SiteName" 
     DataValueField="SiteName"> 
    </asp:DropDownList> 

    <asp:SqlDataSource ID="SqlDataSourceSitePicker" runat="server" 
     ConnectionString="<%$ ConnectionStrings:MainAppDB %>" 
     SelectCommand="portal_SitePicker" SelectCommandType="StoredProcedure"> 

     <SelectParameters> 
       <asp:Parameter Name="portaluserid" Type="String" /> 
     </SelectParameters> 

    </asp:SqlDataSource> 

</code> 

這裏是存儲過程的代碼

<code> 
ALTER PROCEDURE [dbo].[portal_SitePicker] 
    -- Add the parameters for the stored procedure here 
    @portaluserid varchar 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    SELECT SiteName 
FROM dbo.aspnet_UserMap, dbo.Sites 
WHERE dbo.Sites.SiteID = dbo.aspnet_UserMap.SiteID 
and dbo.aspnet_UserMap.UserID = @portaluserid 
END 
</code> 

如果我測試的存儲過程它拉正確的網站,但我不知道怎麼樣從當前登錄用戶獲取用戶標識值。

有什麼建議嗎?

+0

'Page.User.Identity.Name'將爲您提供當前登錄的用戶名。 – mellamokb

+0

謝謝,我將StoredProc更改爲使用用戶名而不是ID。我還向我的sqldatasource添加了。然而,當頁面加載時,下拉框是空的。我必須錯過一步。 – Zach

回答

0

當您傳遞該參數時,它更傾向於在S​​QL和asp頁面中爲varchar設置參數的長度。您可以嘗試在參數文件上添加大小,例如在asp頁面上,然後使用@portaluserid varchar(25)和存儲過程