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

Alw*_*ice 4 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");            
    }
Run Code Online (Sandbox Code Playgroud)

但这没效果.谁能帮助我弄清楚如何使Tutorial链接正常工作?非常感谢你提前!!!

Jer*_*ins 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";
    }
}
Run Code Online (Sandbox Code Playgroud)

真的,最好先检查一下你是否真的用户.

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";
    }
}
Run Code Online (Sandbox Code Playgroud)


Grr*_*404 6

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

这行代码

System.Diagnostics.Process.Start("help/AdminTutorial.html");
Run Code Online (Sandbox Code Playgroud)

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

一个非常简单的解决方案是在page_load方法中更改链接的href属性.

你的aspx代码:

<a href="#" runat="server" id="myLink">Tutorial</a>
Run Code Online (Sandbox Code Playgroud)

你的codebehind/cs代码是page_load:

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

别忘了再次在"AdminToturorial.html"上检查管理员权限以"防止"黑客行为.