2012-01-09 14 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作品巨大なmisanderstandingを持っています。

コード

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

のこの行は、新しいサイトにadminユーザーをリダイレクトしますが、サーバー(通常はブラウザ、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"を使用する場合は、Jeremy Wigginsの回答を確認してください。 – Grrbrr404

+0

シンプルなソリューションをありがとう!それは完全に働いた。 – AlwaysANovice

1

これが役に立ちます。 .aspxの時代に

//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"; 

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

このvariabeを渡すは.csページで

は、あなたのアンカータグの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

ジェレミーに精巧な答えをありがとうございました!しかし、私は正確なことをしようとしているとき、私はこのエラーメッセージが表示されます: "lnkTutorial 'という名前は現在のコンテキストに存在しません" asp:HyperLinkのIDを追加した後でさえ。どんな考え? – AlwaysANovice

+0

@Jeremy HyperLinkコントロールのOnClickイベントが見つかりませんでした。おそらくLinkBut​​tonを考えていましたか? – RSW

+0

@RSW - 良いキャッチ。私はそれに応じて答えを更新しました。 –

関連する問題