web-dev-qa-db-ja.com

ASP.NET radiobuttonlist onclientclick

ASP.NETコントロールセットのradiobuttonlistにOnClientClick()プロパティがないことに気づきました。これはマイクロソフト側の意図的な省略ですか?とにかく、私はOnClickを次のようにラジオボタンリストに追加しようとしました:

For Each li As ListItem In rblSearch.Items
    li.Attributes.Add("OnClick", "javascript:alert('jon');")
Next

しかし、悲しいかな、それは機能しません。 Firebugでソースを確認したところ、radiobuttonlistにJavaScriptが表示されていません。誰もがこの非常に単純なことを機能させる方法を知っていますか?私はASP.NETコントロールadpatersを使用しているので、それがそれと何か関係があるかどうかはわかりません。

(asp.net/javascriptが機能することを願っています!!!)

14
jaffa

RadioButtonListにonclick属性を追加するだけで、JavaScriptクライアント側を期待どおりに起動することがわかりました。

<asp:RadioButtonList ID="RadioButtonList1" runat="server" onclick="alert('RadioButtonListSelectChange');">
    <asp:ListItem Text="One" Value="1"/>
    <asp:ListItem Text="Two" Value="2"/>
</asp:RadioButtonList>

次に、現在選択されているリストアイテムを判別できるクライアントスクリプトを記述できます。

26

実際には答えではありませんが、他の提案に関するいくつかの奇妙な観察。これは、RepeatDirection = Verticalを指定したASP.Net 4.0アプリのRadioButtonListであると言って前置きします。

1)onclick = 'myJsFunction(this);'を追加しますListItemの属性は、ページの別のアイテムによってポストバック(ボタンアクションなど)が発生した後exceptにうまく機能しました。 ListItems レンダリングされないポストバックの結果。開始するためにレンダリングされますが、ボタンアクションがある場合はレンダリングされません。図を行きます。

2)どうやら、私たちのレガシーコードは、ポストバックで非常に濁ってしまうRadioButtonList/ListItemの標準的な動作ではなく、あいまいで依存しているようです。 ListItemにid属性を配置すると、ASP.Net 2.0+はラジオボタンの周囲にspanタグを追加し、そこにID値を配置します。 onclick属性を追加すると、少なくともPage.IsPostBack == falseの場合は、ラジオボタンに表示されます。

<asp:RadioButtonList  ID="proceedChoice" runat="server" RepeatDirection="Vertical">
    <asp:ListItem id="Close_Case_Y" Value="Y" onclick="SelectResolveType(this);" Text="I want to close this case."  runat="server" />
    <asp:ListItem id="Close_Case_N" Value="N" onclick="SelectResolveType(this);" Text="I want to cancel this and start over."  runat="server" />
</asp:RadioButtonList>

としてレンダリング

<table id="...proceedChoice" border="0">
<tr>
    <td><span id="Close_Case_Y"><input id="..._proceedChoice_0" type="radio" value="Y" onclick="SelectResolveType(this);" /><label for="..._proceedChoice_0">I want to close this case.</label></span></td>
</tr><tr>
    <td><span id="Close_Case_N"><input id="..._proceedChoice_1" type="radio" value="N" onclick="SelectResolveType(this);" /><label for="..._proceedChoice_1">I want to cancel this case and start over.</label></span></td>
</tr>
</table>

他のボタンからポストバックした後、同じテンプレートが

<table id="...proceedChoice" border="0">
<tr>
    <td><input id="..._proceedChoice_0" type="radio" value="Y" /><label for="..._proceedChoice_0">I want to close this case.</label></td>
</tr><tr>
    <td><input id="..._proceedChoice_1" type="radio" value="N" /><label for="..._proceedChoice_1">I want to cancel this case and start over.</label></td>
</tr>
</table>

しかし、ここが本当に奇妙なところです。idとonclick以外のListItemの他の属性を追加すると、それらだけ属性が保持されます。たとえば、hidden = "hidden"をいずれかのListItemに追加すると、ポストバック後に次のようにレンダリングされます

<table id="...proceedChoice" border="0">
<tr>
    <td><span hidden="hidden"><input id="..._proceedChoice_0" type="radio" value="Y" /><label for="..._proceedChoice_0">I want to close this case.</label></span></td>
</tr><tr>
    <td><input id="..._proceedChoice_1" type="radio" value="N" /><label for="..._proceedChoice_1">I want to cancel this case and start over.</label></td>
</tr>
</table>
2
user1664043

Onclick属性関数は、ListItemオブジェクトで非常に優れています。このようにしてみてください:

li.Attributes.Add("onclick", "javascript:showDiv()")

その機能は私に。

2
Daniel Silva

これはリストコントロールであるため、OnClientClickイベントはありません。ポストバック(SelectedIndexChange)を使用するか、JavaScriptを記述して、各ラジオボタンのクリックを取得します。

0
Dan
            foreach (PlaceType t in query.ToList())
        {

            ListItem li = new ListItem(@"<img src=""" + t.ImageRelativePath + @"""/><br/>" + t.PlaceTypeText, t.PlaceTypeID.ToString());
            li.Attributes.Add("onclick", "javascript:placeTypeChange('" + t.ImageRelativePath + "')");
            rblPlaceTypes.Items.Add(li);
        }

だから私は

a)EFクエリの結果を反復します。 b)新しいリストアイテムを作成し、それをラジオボタンリスト(rblPlaceTypes)に追加します。 c)コンストラクタは画像を表示するように配置しています。 d)li.Attributs.Addがjavascriptワイヤーアップを配置しています。

0
Eric