2012-01-09 30 views
4

我想爲我在頁面中的超鏈接添加一個條件。如何使用C#代碼使用onClick事件進行超鏈接?

而不僅僅是使用特定的鏈接:<a href="help/Tutorial.html">Tutorial</a>我想爲不同的用戶顯示不同的頁面。例如,如果用戶以管理員身份登錄,則會以不同於普通用戶的鏈接顯示。

我已經修改我的超級鏈接爲:<a onclick="displayTutorial_Click">Tutorial</a>

,並添加以下代碼:

protected void displayTutorial_Click(object sender, EventArgs e) 
    { 
     // figure out user information 
     userinfo = (UserInfo)Session["UserInfo"]; 

     if (userinfo.user == "Admin") 

      System.Diagnostics.Process.Start("help/AdminTutorial.html"); 

     else 

      System.Diagnostics.Process.Start("help/UserTutorial.html");    
    } 

但這並沒有工作。任何人都可以請幫我弄清楚如何讓教程鏈接正常工作?預先感謝你!

回答

6

哇,你有一個巨大的誤解,如何asp.net工程。

這行代碼

System.Diagnostics.Process.Start("help/AdminTutorial.html"); 

不會一個管理員用戶重定向到一個新的站點,但服務器(通常是瀏覽器,IE瀏覽器)上啓動一個新的進程,並加載網站。這當然不是你想要的。

一個非常簡單的解決方案是改變你的page_load方法中鏈接的href屬性。

你的aspx代碼:

<a href="#" runat="server" id="myLink">Tutorial</a> 

你的代碼隱藏/ Page_Load中的CS代碼:

... 
if (userinfo.user == "Admin") 
{ 
    myLink.Attributs["href"] = "help/AdminTutorial.html"; 
} 
else 
{ 
    myLink.Attributs["href"] = "help/otherSite.html"; 
} 
... 

不要忘記再次檢查 「AdminToturorial.html」 管理員權限 「防止」 黑客。

+0

如果你想使用服務器控件「HyperLink」 – Grrbrr404 2012-01-09 06:37:51

+0

,請檢查Jeremy Wiggins的答案謝謝你的簡單解決方案!它工作完美。 – AlwaysANovice 2012-01-09 07:07:40

1

這可能會幫助你。

在頁面的.cs,

//Declare a string 
    public string usertypeurl = ""; 
    //check who is the user 
     //place your code to check who is the user 
     //if it is admin 
     usertypeurl = "help/AdminTutorial.html"; 
     //if it is other 
     usertypeurl = "help/UserTutorial.html"; 

在年齡的.aspx通過這個variabe

<a href='<%=usertypeurl%>'>Tutorial</a> 
13

onclick屬性上的錨標記會調用客戶端功能。 (這是如果你想叫一個javascript函數鏈接被點擊的時候,你會用什麼。)

你想要的是一個服務器端控件,如LinkButton

<asp:LinkButton ID="lnkTutorial" runat="server" Text="Tutorial" OnClick="displayTutorial_Click"/>

這有一個OnClick屬性,它將在您的代碼中調用該方法。

進一步研究你的代碼,它看起來像你只是試圖根據用戶的訪問級別打開一個不同的教程。根本不需要事件處理程序。更好的方法是在代碼背後設置LinkButton控件的終點。

protected void Page_Load(object sender, EventArgs e) 
{ 
    userinfo = (UserInfo)Session["UserInfo"]; 

    if (userinfo.user == "Admin") 
    { 
     lnkTutorial.PostBackUrl = "help/AdminTutorial.html"; 
    } 
    else 
    { 
     lnkTutorial.PostBackUrl = "help/UserTutorial.html"; 
    } 
} 

真的,這將是最好的檢查,你實際上用戶第一。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["UserInfo"] != null && ((UserInfo)Session["UserInfo"]).user == "Admin") 
    { 
     lnkTutorial.PostBackUrl = "help/AdminTutorial.html"; 
    } 
    else 
    { 
     lnkTutorial.PostBackUrl = "help/UserTutorial.html"; 
    } 
} 
+0

謝謝傑里米您的詳盡答案!然而,當我嘗試確切的事情時,我得到這個錯誤消息:「即使在爲asp:HyperLink添加ID後,名稱'lnkTutorial'在當前上下文中不存在」。任何想法爲什麼? – AlwaysANovice 2012-01-09 06:57:53

+0

@Jeremy我無法找到HyperLink控件的OnClick事件...你可能想過LinkBut​​ton嗎? – RSW 2013-09-17 15:04:55

+0

@RSW - 好。我相應地更新了答案。 – 2013-09-17 16:36:42

相關問題