次のようにフォームに複数のラジオボタングループが必要です。
各グループに同じ "name" html属性を指定することで簡単に実行できることを知っています。
ただし
MVCでは、次のようなhtmlヘルパーを使用するときに独自の名前属性を指定できません。
@Html.RadioButtonFor(i => item.id, item.SelectedID, new { Name = item.OptServiceCatId })
理由各タグの「name」属性(「id ")コントローラーが受け取るモデルにフォームをマップ/バインドするなど。
同じ「GroupName」属性でそれぞれを指定すると問題が解決するが、それも機能しなかったと言う人もいます。
だから、動作する方法はありますか?
編集:
これが私の見解です(簡略化):
@model Service_Provider.ViewModels.SelectOptServicesForSubServiceViewModel
@foreach (var cat in Model.OptServices)
{
//A piece of code & html here
@foreach (var item in cat.OptItems.Where(i => i.MultiSelect == false))
{
@Html.RadioButtonFor(i => item.id, item.SelectedID, new { GroupName = item.OptServiceCatId })
<br />
}
}
注:
私のモデルはList<OptServices>
です:
public List<OptServices> Cats {get; set;}
また、OptServicesの内部にはList
of OptItems
があります。
public class OptServices
{
//a few things
public List<OptItems> Items {get; set;}
}
OKこれを修正する方法は次のとおりです
私のモデルはlist
of categoriesです。各カテゴリには、サブカテゴリのlist
が含まれます。
これを念頭に置いて、foreachループのたびに、各RadioButton
にはname属性としてカテゴリのID(一意)があります。
そして、Html.RadioButton
の代わりにHtml.RadioButtonFor
も使用しました。
最終的な「動作する」擬似コードは次のとおりです。
@foreach (var cat in Model.Categories)
{
//A piece of code & html here
@foreach (var item in cat.SubCategories)
{
@Html.RadioButton(item.CategoryID.ToString(), item.ID)
}
}
結果は次のとおりです。
<input name="127" type="radio" value="110">
フォーム内にこれらのラジオボタングループをすべて配置したわけではないことに注意してください。そして、このソリューションがフォームで適切に機能するかどうかはわかりません。
これを解決してくれたすべての人々に感謝します;)
必要なのは、グループをモデル内の別のアイテムに関連付けることだけです
@Html.RadioButtonFor(x => x.Field1, "Milk")
@Html.RadioButtonFor(x => x.Field1, "Butter")
@Html.RadioButtonFor(x => x.Field2, "Water")
@Html.RadioButtonFor(x => x.Field2, "Beer")
SelectListからのテキスト/値のペアを使用してRadioButtonForを構築する同様の問題を修正しました。 ViewBagを使用してSelectListをビューに送信しましたが、モデルのデータも使用できます。私のWebアプリケーションはブログであり、彼が新しい投稿を書いているときに、いくつかの種類の記事でRadioButtonを作成する必要があります。
以下のコードは単純化されています。
List<SelectListItem> items = new List<SelectListItem>();
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("Texto", "1");
dictionary.Add("Foto", "2");
dictionary.Add("Vídeo", "3");
foreach (KeyValuePair<string, string> pair in objBLL.GetTiposPost())
{
items.Add(new SelectListItem() { Text = pair.Key, Value = pair.Value, Selected = false });
}
ViewBag.TiposPost = new SelectList(items, "Value", "Text");
ビューでは、foreachを使用してラジオボタンを作成しました。
<div class="form-group">
<div class="col-sm-10">
@foreach (var item in (SelectList)ViewBag.TiposPost)
{
@Html.RadioButtonFor(model => model.IDTipoPost, item.Value, false)
<label class="control-label">@item.Text</label>
}
</div>
</div>
フォームを送信した後、ユーザーがコントローラーで選択したオプションvalueをキャッチするためにRadioButtonForを使用していることに注意してください。 textオプションを表示するには、RadioButtonForの外側にitem.Textを配置する必要もありました。
役に立てば幸いです!
辞書を使用して、牛乳、バター、チェスがグループA(リストA)であると想定します。水、ビール、ワインはグループBです
Dictonary<string,List<string>>) dataMap;
dataMap.add("A",ListA);
dataMap.add("B",ListB);
Viewでは、dataMapのキーをforeachしてアクションを処理できます
私が取り組んでいるループの例で説明した名前属性を使用できましたが、おそらく一意のIDを作成したために機能しましたか?別の回答のリンクに記載されているように、代わりにエディターテンプレートに切り替えるべきかどうかを検討しています。
@Html.RadioButtonFor(modelItem => item.Answers.AnswerYesNo, "true", new {Name = item.Description.QuestionId, id = string.Format("CBY{0}", item.Description.QuestionId), onclick = "setDescriptionVisibility(this)" }) Yes
@Html.RadioButtonFor(modelItem => item.Answers.AnswerYesNo, "false", new { Name = item.Description.QuestionId, id = string.Format("CBN{0}", item.Description.QuestionId), onclick = "setDescriptionVisibility(this)" } ) No