Heim > Backend-Entwicklung > C++ > Wie gruppiere ich Optionsfelder in ASP.NET MVC 5 korrekt nach Frage?

Wie gruppiere ich Optionsfelder in ASP.NET MVC 5 korrekt nach Frage?

DDD
Freigeben: 2025-01-02 13:22:09
Original
660 Leute haben es durchsucht

How to Correctly Group Radio Buttons by Question in ASP.NET MVC 5?

Gruppieren von Optionsfeldern in ASP.NET MVC 5

Frage:

In einer ASP.NET MVC 5-Anwendung Ein Formular verfügt über mehrere Sätze von Optionsfeldern. Jede Gruppe stellt eine Frage dar, aber das Code-Snippet generiert nur eine Gruppe, sodass nur für die erste Frage ausgewählte Optionsfelder vorhanden sind, während andere deaktiviert sind. Wie kann dieses Problem gelöst werden, um Optionsfelder korrekt nach Fragen zu gruppieren?

Antwort:

Um Optionsfelder nach Fragen zu gruppieren, müssen mehrere Probleme im bereitgestellten Code behoben werden :

  • Doppelte IDs: Stellen Sie sicher, dass die Optionsfelder eindeutig sind, um ungültige IDs zu vermeiden HTML.
  • Doppelte Namensattribute: Vermeiden Sie doppelte Namensattribute, um mehrere Gruppen zu erstellen. Gruppieren Sie stattdessen Optionsfelder, indem Sie ihnen das gleiche Namensattribut zuweisen.
  • Binden an eine falsche Eigenschaft: Binden Sie Optionsfelder ordnungsgemäß an die zugehörige Frageneigenschaft.

Geänderter Code:

@foreach (var question in Model.GeneralQuestions)
{
    <div class="well">
        <h3><strong>@question.QuestionString</strong></h3>
        @foreach (var answer in question.PossibleAnswers)
        {
            @Html.RadioButtonFor(
                model => model.GeneralQuestions.IndexOf(question), // Binding to index of question in list
                answer.Answer,
                new { id = $"question_{question.QuestionID}_answer_{answer.Answer}" })
            @Html.Label(answer.Answer)
            <br />
        }
    </div>
}
Nach dem Login kopieren

Ansicht Modelle:

Erstellen Sie Ansichtsmodelle mit Eigenschaften, um sie an die Optionsfelder zu binden und Fragen anzuzeigen.

public class QuestionVM
{
    public string QuestionString { get; set; }
    public IEnumerable<AnswerVM> PossibleAnswers { get; set; }
}

public class StudentVM
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<SubjectVM> Subjects { get; set; }
}

public class SubjectVM
{
    public string Name { get; set; }
    public List<QuestionVM> Questions { get; set; }
}
Nach dem Login kopieren

Ansicht:

@model StudentVM
@using (Html.BeginForm())
{
    @Html.HiddenFor(m => m.ID)
    @Html.DisplayFor(m => m.Name)
    for (int i = 0; i < Model.Subjects.Count; i++)
    {
        @Html.HiddenFor(m => m.Subjects[i].ID)
        @Html.DisplayFor(m => m.Subjects[i].Name)
        for (int j = 0; j < Model.Subjects[i].Questions.Count; j++)
        {
            @Html.HiddenFor(m => m.Subjects[i].Questions[j].ID)
            @Html.DisplayFor(m => m.Subjects[i].Questions[j].QuestionString)
            foreach (var answer in Model.Subjects[i].Questions[j].PossibleAnswers)
            {
                <div>
                    @Html.RadioButtonFor(
                        m => m.Subjects[i].Questions[j].SelectedAnswer,
                        answer.ID,
                        new { id = $"question_{SubjectQuestions[i].Questions[j].ID}_answer_{answer.ID}" })
                    <label for="@answer.ID">@answer.Text</label>
                </div>
            }
        }
    }
    <input type="submit" value="save" />
}
Nach dem Login kopieren

Controller:

public ActionResult Edit(int ID)
{
    StudentVM model = new StudentVM();
    // Populate model with data from database
    return View(model);
}

[HttpPost]
public ActionResult Edit(StudentVM model)
{
    // Save and redirect
    return RedirectToAction("Index");
}
Nach dem Login kopieren

Dies wurde geändert Code:

  • Bindet Optionsfelder an die richtige Eigenschaft (den Index der Frage in der Liste).
  • Erstellt eindeutige IDs für Optionsfelder und verwendet konsistente Namenskonventionen.
  • Verwendet Ansichtsmodelle für eine bessere Organisation und Datendarstellung.

Das obige ist der detaillierte Inhalt vonWie gruppiere ich Optionsfelder in ASP.NET MVC 5 korrekt nach Frage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage