wake-up-neo.net

Mehrere Optionsfeldgruppen in MVC 4 Razor

Ich muss mehrere Optionsfeldgruppen in meinem Formular haben:
enter image description here

Ich weiß, dass es einfach getan wird, indem für jede Gruppe das gleiche "name" - html-Attribut angegeben wird.
JEDOCH
MVC erlaubt Ihnen nicht, Ihr eigenes Namensattribut anzugeben, wenn Sie HTML-Helper wie folgt verwenden:

@Html.RadioButtonFor(i => item.id, item.SelectedID, new { Name = item.OptServiceCatId })  

Weil das Attribut "name" jedes Tags (nicht "id") betrachtet, um das Formular dem Modell zuzuordnen, das der Controller empfängt, usw. 

Einige sagten, dass das Problem durch die Angabe jedes Attributs mit dem gleichen "GroupName" -Attribut gelöst werden würde, aber es funktionierte auch nicht.

Gibt es eine Möglichkeit, die funktioniert?

BEARBEITEN:
Hier ist meine Ansicht (vereinfacht):

@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 />
  }    
}

HINWEIS:
Mein Modell ist ein List<OptServices>:

public List<OptServices> Cats {get; set;}

Und OptServices hat eine List von OptItems im Inneren:

public class OptServices
{
//a few things
public List<OptItems> Items {get; set;}
}
35
Ali

Ok, hier habe ich das Problem behoben

Mein Modell ist eine list von categories . Jede Kategorie enthält eine list ihrer Unterkategorien .
Vor diesem Hintergrund hat jedes RadioButton in der foreach-Schleife die ID seiner Kategorie (die eindeutig ist) als name -Attribut.
Und ich habe auch Html.RadioButton anstelle von Html.RadioButtonFor verwendet.

Hier ist der letzte "funktionierende" Pseudo-Code:

@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)
  }    
}

Das Ergebnis ist:

<input name="127" type="radio" value="110">

Bitte beachten Sie, dass ich NICHT alle diese Optionsfeldgruppen in ein Formular einfügen muss. Und ich weiß nicht, ob diese Lösung in einem Formular noch ordnungsgemäß funktioniert.

Danke an alle Leute, die mir geholfen haben, das zu lösen;)

18
Ali

sie müssen lediglich die Gruppe an einen anderen Artikel in Ihrem Modell binden

@Html.RadioButtonFor(x => x.Field1, "Milk")
@Html.RadioButtonFor(x => x.Field1, "Butter")

@Html.RadioButtonFor(x => x.Field2, "Water")
@Html.RadioButtonFor(x => x.Field2, "Beer")
28
Matt Bodily

Ich habe ein ähnliches Problem beim Erstellen eines RadioButtonFor mit Text/Wert-Paaren aus einer SelectList behoben. Ich habe ein ViewBag verwendet, um die SelectList an die View zu senden. Sie können jedoch auch Daten aus dem Modell verwenden. Meine Webanwendung ist ein Blog und ich muss einen RadioButton mit einigen Arten von Artikeln erstellen, wenn er einen neuen Beitrag schreibt.

Der folgende Code wurde vereinfacht.

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");

In der Ansicht habe ich eine Foreach verwendet, um einen Radiobutton zu bauen. 

<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>

Beachten Sie, dass ich RadioButtonFor verwendet habe, um die vom Benutzer ausgewählte Option value im Controler nach dem Senden des Formulars abzufragen. Ich musste das item.Text auch außerhalb des RadioButtonFor-Objekts platzieren, um die Optionen text anzuzeigen.

Ich hoffe es ist nützlich! 

2
Marcelo Sader

Sie können Dictionary zum Zuordnen verwenden Angenommen, Milch, Butter, Chesse sind Gruppe A (ListA) Wasser, Bier, Wein sind Gruppe B 

Dictonary<string,List<string>>) dataMap;
dataMap.add("A",ListA);
dataMap.add("B",ListB);

In der Ansicht können Sie in dataMap nach Schlüsseln suchen und Ihre Aktion verarbeiten

0
Dakota

Ich konnte das Namensattribut, das Sie in Ihrem Beispiel beschrieben haben, für die Schleife verwenden, an der ich arbeite. Ich überlege immer noch, ob ich zu einer Editorvorlage wechseln soll, wie in den Links in einer anderen Antwort erwähnt.

    @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
0
Anna