web-dev-qa-db-ja.com

onclickイベントをASP.NET Labelサーバーコントロールに追加する方法はありますか?

私はこのようなことをしたかった:

<asp:Label ID="lblMyLabel" onclick="lblMyLabel_Click" runat="server">My Label</asp:Label>

私はJavascriptで私ができることを知っています:

<span onclick="foo();">My Label</span>

だから、Labelオブジェクトではなぜそれができないのだろうと思っています。

26
fuentesjr

属性を使用して、onclickクライアント側コールバックを追加できます。

スパンタグでこれを行うことができるとは知りませんでしたが、機能する場合は、lblMyLabel.Attributes.Add("onclick", "foo();");で 'onclick'を追加できます

ただし、foo();はクライアント側のJavaScript関数である必要があります。

System.Web.UI.WebControls.Labelには、OnClickサーバーイベントはありません。上記の例でサーバーコールバックが必要な場合は、AJAXを使用して調べることができます。

他の発言のようにLinkButtonを使用することもできます。 CSSを使用することで、リンクのように見えないようにすることができます(関心があるのがその下線だけである場合)。

ASPX:

<asp:LinkButton ID="LinkButton1" runat="server" 
    CssClass="imjusttext" OnClick="LinkButton1_Click">
LinkButton
</asp:LinkButton>

CSS:

a.imjusttext{ color: #000000; text-decoration: none; }
a.imjusttext:hover { text-decoration: none; }
42
Brian Kim

サーバー(VBまたはc#)でクリックイベントを発生させるか、クライアント(javascript)でクリックイベントを発生させるかは、質問では指定されていません。サーバー側イベントを探している場合は、リンクはラベルとして表示されます。その後、リンクボタンのサーバー側クリックイベントを使用できます。クライアント側のクリックイベントを探している場合-サーバーコントロールマークアップに入力するだけです
asp:label id="MyLabel" runat="server" onclick="javascript:alert('hello');" Text="Click Me";
ASP.NETは、生成するHTMLマークアップで追加の属性を発行します。

11
CodeChef

たとえば、page_loadのコードで実行できます。

void Page_Load(object sender, EventArgs e) 
{
      lblMyLabel.Attributes.Add("onclick",
           "javascript:alert('ALERT ALERT!!!')");
}
5
JamesSugrue

Onclickイベントが必要な場合は、onclientclickイベントを持つリンクボタンを使用しないでください。

<asp:linkbutton id="lblMyLink" onclientclick="lblMyLink_Click" runat="server">My Label</asp:linkbutton>

CSSを使用して、リンクを好きなように見せることができます

2
Glenn Slaven

できると思いますが、サーバー側ではなく、クライアント側のonclickハンドラーです。属性がサポートされていない(またはそのようなもの)と文句を言うでしょうが、正しく表示されると思います。サーバー側のハンドラを使用する場合は、LinkBut​​tonを実行する必要があると思います。

1
tvanfosson

私の知る限り、それは不可能です。ラベルコントロールは、サーバー側で「クリック不可能」な<span>要素を出力します。 LabelコントロールをLinkBut​​tonに置き換える必要があります。

1
Pavel Chuchuva

別のハックは、style = "display:none;"で非表示のリンクまたはボタンを使用することですスパン内のjavascript関数からサーバーコントロールのクリックをトリガーします。

このようなもの:

<asp:linkbutton id="lblMyLink" onClick="lblMyLink_Click" runat="server" style="display:none;">My Link</asp:linkbutton>
<span onclick="document.getElementById('lblMyLink').click();">My Label</span>
1

Yourslefのメソッドとなるラベルおよびonclickイベントハンドラから継承するクラスオブジェクトを作成し、オブジェクトをカスタムラベルとして使用する必要があります。

0
Takele

.netの標準ポストバックjavascriptを使用して、スパンを生成する独自のコントロールをいつでも展開できますが、前述のように、CSSクラスでlinklabelを使用する方が簡単です

0

この問題を解決するために、データセットに子レコードがある場合にのみDataList Itemテンプレートに表示されるラベルを.aspxページで使用しました。

ラベルにonclick関数を追加しました:

moreOptionsLabel.Attributes.Add( "onclick"、string.Format( "toggle_visibility( '{0}')"、div.ClientID));

私の.csファイルに。 onclickはクライアント側のjavascript関数を指しているため、.aspxページのdivタグを制御してレコードを表示または非表示にします。 div.ClientIDに注意してください。これにより、これがデータリストで機能します。

上記のように、spanタグは実際に「onclick」で機能します。また、ラベルコントロールはページリクエスト後にスパンとしてレンダリングされるため、Addtribute.Add( "onclick" ....を使用すると機能します。

結果は、ポストバックを行わずにデータの表示/非表示機能です。 LinkBut​​ton、または類似のコントロールを使用する場合-ポストバックとページの再読み込みは避けられません-Ajaxのものに取り掛かりたい場合を除きます。

注:spanタグは、下線と手のカーソルでスタイルを設定しない限り、クリック可能に見えません。

このアイデアの功績は、Will Asrariの http://www.willasrari.com/blog/display-nested-repeaters-and-gridviews-asynchronously/000292.aspx にあります。

0
Doug