日期:2014-05-18  浏览次数:20477 次

左侧导航设计 标题我也不知道如何取 大哥大姐帮帮忙
一个Menu 菜单表,里面设计MenuID(pk) Name Parentid URL 
一个UserInfo用户表 设计UserID(pk) UserName Password
一个Nexus关系表 设计UserID(FK) MenuID(Fk)
菜单表和用户表都是一个关系表的外键,也就是某个用户有某些单菜的关联就有进入该菜单的权限(不知道这样说能听懂吗)
我用树读取所有菜单的Name 但是我想取得用户ID后判断关系表中是否有关联,有就读出来,没有就不显示。这个怎么判断?

第二,我判断出来后如何绑定URL 也就是跳转的地址? 

我从前做的时候没有做权限也就是所有的的都是用一个模版写死了的, URL地址也是用<a href="url地址">这样固定了,不知道我上面这样的设计是否可以实现,又是如何实现?



帮帮忙!

------解决方案--------------------
引用楼主 dengyi425 的帖子:
我用树读取所有菜单的Name 但是我想取得用户ID后判断关系表中是否有关联,有就读出来,没有就不显示。这个怎么判断?

------解决方案--------------------
......留个脚印~~明天再看~~
------解决方案--------------------
o
------解决方案--------------------
探讨
这样都没看明白我的意思?

我不要SQL语句。这个我会写
比如我的树下面有1,2。3,4,5这五个页面。而张三只有1,2,3我如何读出来显示在树控件上 意思是有的读出来没有的不显示

------解决方案--------------------
明白了,還是可以在訪問數據庫的時候先處理好。
參考下面這個存儲過程,你給一個用戶ID,就會查詢出所有應該顯示的菜單
SQL code

CREATE PROCEDURE GetMenusByUserID
@UserID INT    --用戶ID
AS
DECLARE @tmp TABLE (mid INT PRIMARY KEY NOT NULL,pid INT)
INSERT INTO @tmp SELECT MenuID,Parentid FROM Nexus WHERE UserID=@UserID
DECLARE @OldRecordCnt INT
DECLARE @CurRecordCnt INT
SELECT @OldRecordCnt=COUNT(*) FROM @tmp
WHILE @OldRecordCnt<>0
BEGIN
    INSERT INTO @tmp SELECT MenuID,Parentid FROM Menu a INNER JOIN @tmp b ON a.MenuID=b.pid 
    WHERE a.MenuID NOT IN(SELECT mid FROM @tmp)
    SELECT @CurRecordCnt=COUNT(*) FROM @tmp
            IF @CurRecordCnt=@OldRecordCnt 
        BREAK
    ELSE
            SET @OldRecordCnt=@CurRecordCnt
END
SELECT m.MenuID,m.Name,m.ParentId,m.URL FROM Menu m WHERE m.MenuID IN (SELECT mid FROM @tmp)
GO

------解决方案--------------------
你用的是什么控件?可以使用數據綁定啊。
------解决方案--------------------
參考下面這個簡單的示例,我用DataList控件來顯示鏈接,每條記錄使用一個HyperLink,其中NavigateUrl與數據庫中的Link字段(即你說的URL)綁定,而Text(即鏈接的文本)與數據庫中的Name字段綁定。
HTML code

    <asp:DataList ID="DataList2" runat="server" DataKeyField="ID" DataSourceID="SqlDataSource2">
        <ItemTemplate>
            <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Link") %>' Text='<%# Eval("Name") %>'></asp:HyperLink><br />
        </ItemTemplate>
    </asp:DataList><asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:onlineConnectionString3 %>"
        SelectCommand="SELECT [ID], [Link], [Name] FROM [MenuClass]"></asp:SqlDataSource>