私はこのようなことをしたかった:
<asp:Label ID="lblMyLabel" onclick="lblMyLabel_Click" runat="server">My Label</asp:Label>
私はJavascriptで私ができることを知っています:
<span onclick="foo();">My Label</span>
だから、Labelオブジェクトではなぜそれができないのだろうと思っています。
属性を使用して、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; }
サーバー(VBまたはc#)でクリックイベントを発生させるか、クライアント(javascript)でクリックイベントを発生させるかは、質問では指定されていません。サーバー側イベントを探している場合は、リンクはラベルとして表示されます。その後、リンクボタンのサーバー側クリックイベントを使用できます。クライアント側のクリックイベントを探している場合-サーバーコントロールマークアップに入力するだけですasp:label id="MyLabel" runat="server" onclick="javascript:alert('hello');" Text="Click Me";
ASP.NETは、生成するHTMLマークアップで追加の属性を発行します。
たとえば、page_loadのコードで実行できます。
void Page_Load(object sender, EventArgs e)
{
lblMyLabel.Attributes.Add("onclick",
"javascript:alert('ALERT ALERT!!!')");
}
Onclickイベントが必要な場合は、onclientclick
イベントを持つリンクボタンを使用しないでください。
<asp:linkbutton id="lblMyLink" onclientclick="lblMyLink_Click" runat="server">My Label</asp:linkbutton>
CSSを使用して、リンクを好きなように見せることができます
できると思いますが、サーバー側ではなく、クライアント側のonclickハンドラーです。属性がサポートされていない(またはそのようなもの)と文句を言うでしょうが、正しく表示されると思います。サーバー側のハンドラを使用する場合は、LinkButtonを実行する必要があると思います。
私の知る限り、それは不可能です。ラベルコントロールは、サーバー側で「クリック不可能」な<span
>要素を出力します。 LabelコントロールをLinkButtonに置き換える必要があります。
別のハックは、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>
Yourslefのメソッドとなるラベルおよびonclickイベントハンドラから継承するクラスオブジェクトを作成し、オブジェクトをカスタムラベルとして使用する必要があります。
.netの標準ポストバックjavascriptを使用して、スパンを生成する独自のコントロールをいつでも展開できますが、前述のように、CSSクラスでlinklabelを使用する方が簡単です
この問題を解決するために、データセットに子レコードがある場合にのみ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" ....を使用すると機能します。
結果は、ポストバックを行わずにデータの表示/非表示機能です。 LinkButton、または類似のコントロールを使用する場合-ポストバックとページの再読み込みは避けられません-Ajaxのものに取り掛かりたい場合を除きます。
注:spanタグは、下線と手のカーソルでスタイルを設定しない限り、クリック可能に見えません。
このアイデアの功績は、Will Asrariの http://www.willasrari.com/blog/display-nested-repeaters-and-gridviews-asynchronously/000292.aspx にあります。