0

ASP ページにリンクを動的に追加しました。クリックすると、関数が呼び出されます。関数を呼び出しているリンクのIDを知りたいです。私のニーズを説明するために google.com と yahoo.com を追加しました。私が行った元のシナリオで、関数が db からデータをプルするようにします。

 <a href="#"  onServerClick="abc_Click" id="4"/>click</a>
 <a href="#" onServerClick="abc_Click" id="5"/>click here</a>

C# コード:

 protected void abc_Click()
 {
    if(id is 4) // don't know how to know the id of the link that calls the function. 
      Response.Redirect("http://www.google.com");
    else
      Response.Redirect("http://www.yahoo.com");
 }

HTML リンクをクリックしたときに ASP.NET で C# 関数を呼び出すを参照しました。

今、私には2つの問題があります。

  1. リンクがクリックされたときに関数が呼び出されません。
  2. 関数を呼び出すリンクのIDを見つける方法がわかりません。
4

3 に答える 3

2

これらのリンクをサーバー側で参照するための重要な属性がありませんでした:

runat="server"

次のようになります。

<a href="#" runat="server" onServerClick="abc_Click" id="4"/>click</a>
<a href="#" runat="server" onServerClick="abc_Click" id="5"/>click here</a>

ところで、これらをどのように動的に追加していますか? うまくいけば、サーバー側。それらがクライアントの JavaScript を介して追加されている場合、サーバーがそれらにイベントをバインドするには遅すぎるためです。

また、実際には何にもリンクしていないため、これらのリンクを作成しないことをお勧めします。(href="#"は、ページの上部に移動するように指示するだけです。) これらは、サーバー側のアクションを実行するためにサーバーに投稿していると思われるため、ボタンとして使用する方が適切です。(ちなみに、これにより、実行しようとしていることがずっと簡単になります。) UX の必要に応じて、ボタンをリンクのようにスタイルすることができます。

サーバー側のハンドラーにも追加の引数が必要です。

protected void abc_Click(object sender, EventArgs e)

この場合、senderクリックされた要素になります。その要素の型にキャストして、プロパティを含む必要なすべての情報を取得でき.Idます。

于 2013-09-24T13:49:37.810 に答える
1

runat="server" を html マークアップに追加して、サーバーで要素を使用できるようにします。それ以外の場合、それは単なる html 要素であり、それらは明らかにサーバー上でアクセスできません...

<a href="#" runat="server" onServerClick="abc_Click" id="4" />

また、実装にパラメーターがないため、イベント ハンドラーを正しく実装する必要があります。

于 2013-09-24T13:47:46.070 に答える
1

runat-server 属性がありません。これを含める場合は、リンクをフォームに含める必要があります。ただし、リンクの ID をサーバーに渡すことはできません (最初に JS で非表示フィールドを変更してから非表示フィールドを投稿しない限り)。ただし、これはかなり単純な問題に対する非常に複雑な解決策です。

最も簡単な方法は、クエリ文字列を追加してから、Page_Load で db 呼び出しを行うことです。

例:

<a href="/mypage.aspx?id=4" />click</a>
<a href="/mypage.aspx?id=5" />click here</a>

そして、コード ビハインドで:

public void Page_Load(object sender, EventArgs e)
{
    if(Request.QueryString["id"] == "4")
    {
        Response.Redirect("http://www.google.com");
    }
    else
    {
        Response.Redirect("http://www.yahoo.com");
    }
}
于 2013-09-24T13:53:27.297 に答える