繁体   English   中英

在MVC中获取选定的单选按钮值

[英]Get selected radiobutton values in MVC

我有下面的模型结构

public class Quiz
{
    public List<Question> Questions { get; set; }
}

public class Question
{
    public int Id { get; set; }
    public String QuestionText { get; set; }
    public List<Option> Options { get; set; }
    public int AnswerId { get; set; }
}

public class Option
{
    public int Id { get; set; }
    public String OptionText { get; set; }
    public int DisplayOrder { get; set; }
}

我的看法就像下面显示所有问题和选项的地方

foreach (var question in Model.Questions)
{
    @Html.DisplayFor(modelItem => question.QuestionText) <br />
    foreach (var option in question.Options)
    {
        @Html.RadioButton("Id", option.Id)@option.OptionText
    }
}
<input type="submit" value="Submit" />

我没有获得所有选定单选按钮的值,它总是在表单集合中返回一个值

[HttpPost]
public ActionResult Quiz(Quiz userResponse, FormCollection form)
{
    foreach (var item in form.AllKeys)
    {
        string value = form[item];
        // save data 
    }
    //var selectedOption = frm["Id"];
    return View();
}

你能帮忙吗?

您创建的单选按钮与您的模型没有关系,并且所有单选按钮都具有相同的name="Id"属性(并且您将只能从所有问题中选择一个选项)。 您需要为typeof Question使用for循环或EditorTemplate (请参阅此答案以获取更详细的说明)。 使用EditorTemplate ,您的代码将是

/Views/Shared/EditorTemplates/Question.cshtml

@model Question
@Html.HiddenFor(m => m.Id)
@Html.DisplayFor(m => m.QuestionText)
@foreach(var option in Model.Options)
{
    <div>
        <label>
            @Html.RadioButtonFor(m => m.AnswerId , option,Id, new { id = "" })
            <span>@option.OptionText</span>
        </label>
    </div>
}

并且在主视图中

@model Quiz
@using (Html.BeginForm())
{
    @Html.EditorFor(m => m.Questions)
    <input type="submit" value="Save" />
}

和控制器方法

[HttpPost]
public ActionResult Quiz(Quiz model)

POST方法中的模型将与每个包含其IdAnswerId (所选OptionId )属性的问题绑定。

旁注:您当前的POST方法具有return View()但这将失败,因为每个Options属性的值将为null 如果需要返回视图(仅在ModelState无效时才需要),则需要重新填充这些集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM