如何使用C#代码将onClick事件用于Hyperlink?

时间:2012-01-09 06:14:18

标签: c# asp.net

我正在尝试为我的页面中的超链接添加条件。

我不想仅使用像<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");            
    }

但是这没用。任何人都可以帮我弄清楚如何使 Tutorial 链接正常工作?非常感谢你提前!!!

3 个答案:

答案 0 :(得分:14)

锚标记上的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";
    }
}

答案 1 :(得分:6)

哇,你对asp.net的运作方式有很大的误解。

这行代码

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

不会将管理员用户重定向到新网站,而是在服务器(通常是浏览器,IE)上启动新进程并加载该网站。这肯定不是你想要的。

一个非常简单的解决方案是更改page_load方法中链接的href attribut。

您的aspx代码:

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

你的codebehind / cs代码是page_load:

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

不要忘记在“AdminToturorial.html”上再次检查管理员权限以“防止”黑客攻击。

答案 2 :(得分: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 age中传递此变量

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