J'ai besoin de plusieurs groupes de boutons radio dans mon formulaire, comme ceci:
Je sais que cela se fait simplement en spécifiant le même attribut HTML "name" pour chaque groupe.
TOUTEFOIS
MVC ne vous permet pas de spécifier votre propre attribut de nom lors de l’utilisation de l’aide HTML comme ceci:
@Html.RadioButtonFor(i => item.id, item.SelectedID, new { Name = item.OptServiceCatId })
Parce que il regarde l'attribut "name" de chaque balise (pas "id") pour mapper/lier le formulaire au modèle que le contrôleur reçoit, etc.
Certains ont dit que spécifier chacun avec le même attribut "GroupName" résoudrait le problème, mais cela ne fonctionnait pas non plus.
Alors, y a-t-il un moyen qui fonctionne?
MODIFIER:
Voici mon point de vue (simplifié):
@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 />
}
}
REMARQUE:
Mon modèle est un List<OptServices>
:
public List<OptServices> Cats {get; set;}
Et OptServices a une List
de OptItems
à l'intérieur:
public class OptServices
{
//a few things
public List<OptItems> Items {get; set;}
}
Ok voici comment j'ai résolu ça
Mon modèle est une list
de catégories . Chaque catégorie contient une list
de ses sous-catégories .
Dans cet esprit, chaque RadioButton
aura à chaque fois dans la boucle foreach l'identifiant de sa catégorie (unique) comme attribut name.
Et j'ai aussi utilisé Html.RadioButton
au lieu de Html.RadioButtonFor
.
Voici le pseudo-code "fonctionnel" final:
@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)
}
}
Le résultat est:
<input name="127" type="radio" value="110">
Veuillez noter que JE N'AI PAS mis tous ces groupes de boutons radio dans un formulaire. Et je ne sais pas si cette solution fonctionnera toujours correctement sous une forme.
Merci à toutes les personnes qui m'ont aidé à résoudre ce problème;)
tout ce dont vous avez besoin est d’attacher le groupe à un article différent de votre modèle
@Html.RadioButtonFor(x => x.Field1, "Milk")
@Html.RadioButtonFor(x => x.Field1, "Butter")
@Html.RadioButtonFor(x => x.Field2, "Water")
@Html.RadioButtonFor(x => x.Field2, "Beer")
J'ai corrigé un problème similaire lors de la création d'un RadioButtonFor avec des paires de texte/valeur à partir d'une liste de sélection. J'ai utilisé un ViewBag pour envoyer la liste de sélection à la vue, mais vous pouvez également utiliser les données du modèle. Mon application Web est un blog et je dois créer un RadioButton avec certains types d'articles lorsqu'il écrit un nouveau message.
Le code ci-dessous a été simplement vérifié.
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");
Dans View, j'ai utilisé un foreach pour créer un radiobutton.
<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>
Notez que j’ai utilisé RadioButtonFor pour intercepter l’option value sélectionnée par l’utilisateur, dans le Controler, après avoir soumis le formulaire. Je devais également mettre l'élément.Text en dehors de RadioButtonFor afin d'afficher les options text.
J'espère que c'est utile!
Vous pouvez utiliser Dictionnaire pour mapper Supposer que le lait, le beurre, le fromage sont le groupe A (ListA) L'eau, la bière et le vin sont le groupe B
Dictonary<string,List<string>>) dataMap;
dataMap.add("A",ListA);
dataMap.add("B",ListB);
Dans View, vous pouvez foreach Keys dans dataMap et traiter votre action.
J'ai pu utiliser l'attribut name que vous avez décrit dans votre exemple pour la boucle sur laquelle je travaille et cela a fonctionné, peut-être parce que j'ai créé des identifiants uniques? Je réfléchis toujours à la question de savoir si je devrais utiliser un modèle d'éditeur, comme indiqué dans les liens d'une autre réponse.
@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