使用基于登录用户的存储过程填充下拉列表

时间:2013-01-21 16:16:38

标签: c# asp.net

我只是在学习asp.net所以我可能错了我的工作方式,所以请告诉我是否有更好的方法。

我有一个“门户”,用户登录,然后他们有一个他们管理的所有网站的下拉列表。

我想使用我创建的存储过程来填充下拉框,该过程基于用户登录。

我使用了内置的createuserWizard,它将用户存储在数据库中。我创建了另一个包含所有站点的表和一个用于将站点和用户链接在一起的第3个表。

这是下拉列表

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

如果我测试存储过程它会拉出正确的站点,但我不确定如何从当前登录用户获取userid值。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

当您传递参数时,可以在SQL和asp页面中为varchar设置参数的长度。您可以尝试在asp页面上添加parmeter上的大小  和@portaluserid varchar(25)和存储过程