ASP.NET ラジオボタンゴの名前(groupname)
-
22-08-2019 - |
質問
また分子を鋳型とした制御(リピーター)上場テキストのその他のマークアップ等を行っています。各項目にはラジオボタンを関連付けられることができますユーザに選択項目が作成したリピーター.
のリピーターに書き込みのラジオボタンを設定id、氏名生成され、デフォルトのASP.NET 命名規約によってラジオボタンを全を踏まえて整理した。このすべてのradiobuttons独立に、再び残念ながら手段を選択できますべてのradiobuttonsでも同時に行います。のラジオボタンの巧みな属性'groupname'の設定に使用される共通の名称、取得しグループとしてまとめて大きな依存もできるだけ選択す。問題はこんの作品のリピーターを確認しこれらの内、idおよびこの名が生じる制御のグルーピング)が異なります。
以降を使用していリピーター(れているので、listviewその他の分子を鋳型とした開発)を利用できませんのRadioButtonList.ではどこに残してくれますか?
かっこの問題を前に解決します。私はほぼ毎ASP.NET プログラマーなのかもしれないものだと思うが、なぜすることはできないのでしょうかはgoogleや固溶体には問題なのでしょうか。また解決策を実施の際にはJavaScript(醜い!) ものradiobuttonsとしてサーバの管理を強ことになったとしても、 Request.Form[name]
読みの状態にします。また実験をオーバーの名前属性を PreRender
イベント-残念ながら、所有するページmasterpage再びオーバーライドは、この名前を反映してフルid/nameで終わるのと同じ間違った結果です。
がない場合には、よりよい解決方法のように掲載しだいたものではなく、あらゆるポストにお考えで少なくともいい友達"ジャック"は右かぐASP.NET あ;)
解決
Google-fu: asp.net ラジオボタンのリピーターの問題
誠に残念な結果のid難号化.私かい作り-やピッキングを多数ご用意-カスタム制御の追加支援のため同じ名前のクライアント
他のヒント
ASP.NET ヒント:をラジオボタンの操作は、リピーター
このコードのJavaScript関数:
function SetUniqueRadioButton(nameregex, current)
{
re = new RegExp(nameregex);
for(i = 0; i < document.forms[0].elements.length; i++)
{
elm = document.forms[0].elements[i]
if (elm.type == 'radio')
{
if (re.test(elm.name))
{
elm.checked = false;
}
}
}
current.checked = true;
}
このコードのリピーターのItemDataBoundイベントです。では正しく動作を把握しておく必要があり、名前のリピーター制御などのGroupNameい信RadioButtons.この場合、を使用していrptPortfoliosの名のリピーター、ポートフォリオとして、グループ名:
protected void rptPortfolios_ItemDataBound(object sender,
RepeaterItemEventArgs e)
{
if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType
!= ListItemType.AlternatingItem)
return;
RadioButton rdo = (RadioButton)e.Item.FindControl("rdoSelected");
string script =
"SetUniqueRadioButton('rptPortfolios.*Portfolios',this)";
rdo.Attributes.Add("onclick", script);
}
REF: http://www.codeguru.com/csharp/csharp/cs_controls/custom/article.php/c12371/
ウラジミール夢して既に作成されているものカスタムを制御することを解決します。利用頂いておりますの GroupRadioButton プロジェクトで作業は完全にラジオボタンの内部で作成されたのでリピーター外の方のリピーターが全て同じグループ
使用しjQueryスクリプト:
<script type="text/javascript">
function norm_radio_name() {
$("[type=radio]").each(function (i) {
var name = $(this).attr("name");
var splitted = name.split("$");
$(this).attr("name", splitted[splitted.length - 1]);
});
};
$(document).ready(function () {
norm_radio_name();
});
// for UpdatePannel
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function () {
norm_radio_name();
});
</script>
ごきげんよう、トメ子です、する必要がありますが、ここでは私が終わって、listview.私listviewのバインドされているVB codebehindんだことを広く募集するとともに、リピーターも想像できます。
かったのOnCheckChangedイベントのradiobuttons機能が選択解除その他のラジオボタンを押します。したの選択したラジオボタンの時にナビゲーションから離れて行っていただきます。
このソリューションを回避JavaScript、jQuery、無視し、GroupName問題です。この理想的なものではなく、その機能としています。あなたにとってどんな年でした立。
マークアップ:
<asp:ListView ID="lvw" runat="server">
<LayoutTemplate>`
<table>
<th>Radio</th>
<tr id="itemPlaceholder"></tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><asp:RadioButton ID="rdbSelect" runat="server" AutoPostBack="true"
OnCheckedChanged="rdbSelect_Changed"/></td>
</tr>
</ItemTemplate>
</asp:ListView>
コード:
Protected Sub rdbSelect_Changed(ByVal sender As Object, ByVal e As System.EventArgs)
Dim rb1 As RadioButton = CType(sender, RadioButton)
For Each row As ListViewItem In lvw.Items
Dim rb As RadioButton = row.FindControl("rdbSelect")
If rb IsNot Nothing AndAlso rb.Checked Then
rb.Checked = False
End If
Next
rb1.Checked = True
End Sub
その場合、送信ボタンをクリックす:
Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
For Each row As ListViewItem In lvw.Items
Dim rb As RadioButton = row.FindControl("rdbSelect")
Dim lbl As Label
If rb IsNot Nothing AndAlso rb.Checked = True Then
lbl = row.FindControl("StudentID")
Session("StudentID") = lbl.Text
End If
Next
Response.Redirect("~/TransferStudent.aspx")
End Sub
これまでのプログラムによ..
いusercontrolは基本的にセットradiobuttons内のリピーターの各インスタンスのusercontrolは公共財というFilterTitleになりインスタンス.
追加これら二つの特性をラジオボタンを置き換えFilterTitle自分の公開プロパティ名
onclick='<%# "$(\"input[name$=btngroup_" + FilterTitle + "]\").removeAttr(\"checked\"); $(this).attr(\"checked\",\"checked\");" %>' GroupName='<%# "btngroup_" + FilterTitle %>'
より簡単..
onclick="$('input[name$=btngroup1]').removeAttr('checked'); $(this).attr('checked','checked');" GroupName="btngroup1"
こちらは純粋なJavascriptの解決のためにご提供しています。
だけで追加します onclick
属性を RadioButton
要素の置換 GroupName ご RadioButton
's GroupName):
<asp:RadioButton ... GroupName="GroupName" onclick="SelectRadioButton('GroupName$',this)" ... />
を含むこのJavascriptのページ:
<script type="text/javascript">
function SelectRadioButton(regexPattern, selectedRadioButton)
{
regex = new RegExp(regexPattern);
for (i = 0; i < document.forms[0].elements.length; i++)
{
element = document.forms[0].elements[i];
if (element.type == 'radio' && regex.test(element.name))
{
element.checked = false;
}
}
selectedRadioButton.checked = true;
}
</script>
をカスタムの制御およびオーバーライドUniqueID、listview UniqueID+GroupName
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MYCONTROLS
{
[ToolboxData("<{0}:MYRADIOBUTTON runat=server></{0}:MYRADIOBUTTON >")]
public class MYRADIOBUTTON : RadioButton
{
public override string UniqueID
{
get
{
string uid = base.UniqueID;
//Fix groupname in lisview
if (this.Parent is ListViewDataItem && GroupName != "")
{
uid = this.Parent.UniqueID;
uid = uid.Remove(uid.LastIndexOf('$'));
uid += "$" + GroupName;
}
return uid;
}
}
}
}
このカスタムを制御することを継承ラジオボタン(公開クラスMYRADIOBUTTON:ラジオボタン).場合は何もしない、クラスにする通常のラジオボタン.を上書きするUniqueIdの変更ができますの論理はどのように名前の属性は、描画されます。を継続して交流を続けており、名前の独自の他のコントロールのページ(外部のlistview)を得ることができUniqueIdから、ListViewを追加GroupNameを追加し、ラジオボタン.
この問題を分類しRadioButtons異なる列は、listview.を加えたいということはあり論理と財源この機能のon/offでのように動作する通常のラジオボタン.
この質問は、交通の便が良く助かりだと思うのですが誰かこの投稿は私の課題でした。
この問題は、2パー
- 防止により、内容が一部変更する場合が一のラジオボタンです。
- いるラジオボタンをクリックされたサーバー側のコードです。
また、同様の問題とラジオボタンでリピーター.この分解はこちら簡単な修正のためのラジオボタンで制御でASP.NET リピーターのjQueryを使う
をお読みください上記を理解の問題です。いることは良かったです。上記のこの問題は二つの部分を選択以上のラジオボタンです。第二に、知るラジオボタンをクリックされたサーバー側のコードです。の溶液に掲載し、上記第た私にとっての第一部です。しかしコードに書いてあるなどの更新のソリューションの掲載ありませんでした。何年経っても色あせない素敵なを変更することも出来少れている。こんばんは。
を創りたかった世論調査と投票ボタンを押します。名前のラジオボタン(ID)がPollGroupValueとGroupname設定PollGroup、リピーター.覚えていGroupname属性ASP.net が描画される名前属性を生成します。私のコードは:
<script type="text/javascript">
/* Step-01: */
$(document).ready(function () {
/* Step-02: */
$("[name*='PollGroup']").each(function () {
$(this).attr('ci-name', $(this).attr('name'));
});
/* Step-03: */
$("[name*='PollGroup']").attr("name", $("[name*='PollGroup']").attr("name"));
$('#Poll1_BtnVote').click(function (e) {
/* Step - 04: */
if ($("[name*='PollGroup']").filter(':checked').length == 0) {
alert('Please select an option.');
e.preventDefault();
}
/* Step - 05: */
$("[name*='PollGroup']").each(function () {
$(this).attr('name', $(this).attr('ci-name'));
});
});
});
ステップ1:きのラジオボタンはリピーター、そのgroupname変更、asp.net に変化していったかについてうユニークです。そのため各ラジオボタンが異なるgroupname(name属性クライアント側で発生するマークアップ).これにより、ユーザーを選択するような機能のすべてのオプションでも同時に行います。この問題は解決jqueryを使うことによって、コードの説明によるその後のコメントです。
ステップ2:このブロックのコードを新しく作成し、ヴ属性と呼ばれci-名前のコピー元のname属性の値はこの新しいカスタム属性をもつ。このプロセスを繰り返し毎にラジオボタンで投票.このうち後ます。
ステップ3:このブロックのコードの設定値の名前属性のすべてのラジオボタンで投票のname属性の値の最初のラジオボタンを押します。このステップを防止ユーザーからの選択を一つ以上のオプションです。
ステップ4:このコード内のイベントハンドラの投票ボタンをクリックし、イベントがあるかどうかを判の利用者が少なくとも一つのオプションです。うなエラーメッセージが表示されます。
ステップ5:このコード内のイベントハンドラの投票ボタンをクリックイベントは、name属性の値のすべてのラジオボタンをその元の値です。これらのコピーの値からカスタム属性ci-名です。これによasp.net サーバ側のコードを知るボタンは実際にクリックします。
また、戸惑このバグを決めただけのリピーターの動的なビルにテーブルを制御す。ユーザ管理およびページでは、単純に以下のように追加:
<asp:Table ID="theTable" runat="server">
<asp:TableHeaderRow runat="server">
<asp:TableHeaderCell runat="server" Text="Column 1"/>
<asp:TableHeaderCell runat="server" Text="Column 2"/>
<asp:TableHeaderCell runat="server" Text="Column 3"/>
</asp:TableHeaderRow>
</asp:Table>
そのデータを追加行のコードをラジオボタンやその他必要な制御できます。もちろんのその他の要素のDIV:
<div runat="server" ID=theDiv">
</div>
もしも希望をASP.NET チームの中心に置しており、この不幸な問題とリピーターのリスト。まだまだのようにリピーター制御を使用します。
安心と本物のスキンケア製品(サーバ側アプローチを使用している。の RadioButton
制御用の UniqueGroupName
物件の決定、グループの名前です。グループ名をキャッシュ内の _uniqueGroupName
ます。設定を使用してこのフィールドの反射まで、オーバーライドのデフォルトグループ名-利用グループ名で全てのラジオボタンのリピーター.ご注意このコードで起動されている必要があのどのページを先読みすればイベントの'ラジオボタンを"コントロール確保のための新しいグループ名を保持越後クリアします
protected void rbOption_PreRender(object sender, EventArgs e)
{
// Get the radio button.
RadioButton rbOption = (RadioButton) sender;
// Set the group name.
var groupNameField = typeof(RadioButton).GetField("_uniqueGroupName", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
groupNameField.SetValue(rbOption, "MyGroupName");
// Set the radio button to checked if it was selected at the last post back.
var groupValue = Request.Form["MyGroupName"];
if(rbOption.Attributes["value"] == groupValue)
{
rbOption.Checked = true;
}
}
これに該当しない理想的なソリューションの皆様がかったので、以下のjQueryを使う.
<asp:RadioButton ID="rbtnButton1" groupName="Group1" runat="server" />
<asp:RadioButton ID="rbtnButton2" groupName="Group1" runat="server" />
etc...
そして次のコードマスター。(またはすべてのページ)
$(function() {
//This is a workaround for Microsoft's GroupName bug.
//Set the radio button's groupName attribute to make it work.
$('span[groupName] > input').click(function() {
var element = this;
var span = $(element).parent();
if (element.checked) {
var groupName = $(span).attr('groupName');
var inputs = $('span[groupName=' + groupName + '] > input')
inputs.each(function() {
if (element != this)
this.checked = false;
});
}
});
});
カスタム制御/オーバーライドなどの HtmlInputControl.RenderAttributes()
法を無視し RenderedNameAttribute
物件:
/// <summary>
/// HACK: For Microsoft's bug whereby they mash-up value of the "name" attribute.
/// </summary>
public class NameFixHtmlInputRadioButton : HtmlInputRadioButton
{
protected override void RenderAttributes(HtmlTextWriter writer)
{
// BUG: Usage of 'HtmlInputControl.RenderedNameAttribute'
// writer.WriteAttribute("name", this.RenderedNameAttribute);
writer.WriteAttribute(@"name", Attributes[@"Name"]);
Attributes.Remove(@"name");
var flag = false;
var type = Type;
if (! string.IsNullOrEmpty(type))
{
writer.WriteAttribute(@"type", type);
Attributes.Remove(@"type");
flag = true;
}
base.RenderAttributes(writer);
if (flag && DesignMode)
{
Attributes.Add(@"type", type);
}
writer.Write(@" /");
}
}
使用した同じテクニックをチェックを外その他の無線jqueryなどは次のとおりですコード
<asp:RadioButton ID="rbSelectShiptoShop" runat="server" onchange="UnCheckRadio(this);" CssClass="radioShop" />
および以下のスクリプト
function UnCheckRadio(obj) {
$('.radioShop input[type="radio"]').attr('checked', false);
$(obj).children().attr('checked', true);
}