gpt4 book ai didi

c# - 在单个 View 中对 RadioButton 进行分组,并正确回传表单数据

转载 作者:行者123 更新时间:2023-11-30 17:05:44 25 4
gpt4 key购买 nike

我目前正在开发一个 MVC 应用程序,该应用程序在单个 View 中涉及多组单选按钮。

当 View 回发时,我希望自动解析和输入表单数据,以便 Controller 中的回发方法传递为每组单选按钮选择的选项。

下面是一些示例代码来说明这一点:

型号

public class SurveyViewModel {

public List<SurveyQuestion> Questions { get; set; }

}

public class SurveyQuestion

{

public string Question { get; set; }

public IEnumerable<SelectListItem> Options { get; set; }

public int Answer { get; set; }

}

public class Option

{
public int Value { get; set; }

public string Text { get; set; }

}

Controller

    public ActionResult Survey()

{
List<string> questions = new List<string> { "Question 1", "Question 2", "Question 3" };



SurveyViewModel model = new SurveyViewModel {

Questions = new List<SurveyQuestion>()

};



foreach (string question in questions)

{

List<Option> list = new List<Option>();

list.Add(new Option() { Value = 1, Text = "Answer 1" });

list.Add(new Option() { Value = 2, Text = "Answer 2" });

list.Add(new Option() { Value = 3, Text = "Answer 3" });

SelectList sl = new SelectList(list, "Value", "Text");



model.Questions.Add(new SurveyQuestion {

Question = question,

Answer = 1, // TODO: Get this from DB

Options = sl

});

}

return View(model);

}

查看

    @foreach (SurveyQuestion question in Model.Questions)

{
<p>@question.Question</p>

@Html.RadioButtonForSelectList(m => question.Answer, question.Options)

}

助手

http://jonlanceley.blogspot.co.uk/2011/06/mvc3-radiobuttonlist-helper.html

如果我们只坚持使用标准 MVC(无扩展),Html.RadioButtonFor 助手最终会输出重复 Option[0]、Option[1] 命名约定的单选按钮组,客户端中的选项[2]等。

这会导致每个组中的第一个选项被分组,每个组中的第二个选项被分组,依此类推。

另一种方法是在 Controller 的回发操作中检查当前请求表单数据,并手动解析它,但我曾希望利用 MVC 的能力自动将传入数据转换为类型化参数 - 而不是这样做这是我自己。

谢谢你的帮助

最佳答案

不要对集合使用 foreach 循环,因为模型绑定(bind)器无法编写正确的标记以使其正确绑定(bind)集合中的每个项目。您需要使用 for 循环:

for (var i = 0; i < Model.Questions.Count(); i++)
{
<p>@Model.Questions[i].Question</p>

@Html.RadioButtonForSelectList(m => Model.Questions[i].Answer, Model.Questions[i].Options)
}

您可以检查使用 forloop 编写的标记。每个问题现在都已编入索引(例如 Questions[0].AnswerQuestions[1].Answer 等等),因此模型绑定(bind)器可以正常工作。我敢打赌 radiobuttonlist 助手甚至不会使用您当前的代码,因为它会写出具有相同名称的选项(例如问题。答案)。所以所有选项都被视为一组。

关于c# - 在单个 View 中对 RadioButton 进行分组,并正确回传表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16144852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com