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>

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

有什么建议么?

4

1 回答 1

0

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

于 2013-01-21T22:30:16.863 回答