Asp.net MVC3表单,视图中的单个表单。。非强类型-如何分析结果

Asp.net MVC3表单,视图中的单个表单。。非强类型-如何分析结果,asp.net,asp.net-mvc-3,Asp.net,Asp.net Mvc 3,我有一张表格。。基本上是一份包含18个问题的调查问卷 它们都是单选按钮组(选择1到5) 从组中取出所选radiobutton的最简单方法是什么(每个按钮组都使用相同的名称属性进行设置) 它不是强类型的。。我只是不确定如何访问控制器中的值?在HttpPost操作中,可以接受“”类型作为参数。它将包含您要查找的所有数据。您可以通过包含所有已发布值的访问这些数据: public ActionResult QuestionnaireAction(FormCollection formCollection

我有一张表格。。基本上是一份包含18个问题的调查问卷

它们都是单选按钮组(选择1到5)

从组中取出所选radiobutton的最简单方法是什么(每个按钮组都使用相同的名称属性进行设置)


它不是强类型的。。我只是不确定如何访问控制器中的值?

在HttpPost操作中,可以接受“”类型作为参数。它将包含您要查找的所有数据。

您可以通过包含所有已发布值的访问这些数据:

public ActionResult QuestionnaireAction(FormCollection formCollection)
{
   foreach (var key in formCollection.AllKeys)
   {
      var value = formCollection[key];
      // etc.
   }

   foreach (var key in formCollection.Keys)
   {
       var value = formCollection[key.ToString()];
       // etc.
   }
}
但是,请务必先阅读本文,因为如果您不了解复选框的工作原理,那么复选框在MVC中可能会很奇怪

它不是强类型的

这是你最大的问题。所以强烈地键入它

。。。当然,要查看模型,请执行以下操作:

public class AnswerViewModel
{
    public string Label { get; set; }
    public string Value { get; set; }
}

public class QuestionViewModel
{
    public string Title { get; set; }
    public string Answer { get; set; }
    public IEnumerable<string> PossibleAnswers { get; set; }
}
最后是一个问题的编辑器模板,它将为模型集合的每个元素呈现(
~/Views/Home/EditorTemplates/QuestionViewModel.cshtml
):

@model QuestionViewModel
@模型名称
@Html.HiddenFor(x=>x.Title)
@foreach(模型中的var项。可能的答案)
{
@RadioButton(x=>x.答案,项目)
@项目
}

嘿,谢谢。。这是有道理的。RadioButtonOn在布局方面有哪些限制?我需要能够控制5个可能答案的显示方式。。填充、宽度等@rwfresh没有限制。你可以随心所欲地布置它们。我不是网页设计方面的专家,但你可以将它们分组,将每个单选按钮应用于特定的CSS类,等等……嗨,达林,我不能让它工作。我的模型有问题和可能的答案。我需要创建RadioButtonGroup,其中名称相同(问题1),并且RadioButton的id将是一些独特的变体。我的模型有一系列问题。你是如何处理这个问题的?
public class HomeController : Controller
{
    public ActionResult Index()
    {
        // TODO: those are obviously going to come from some data store
        // or whatever comes to your mind
        var model = new[]
        {
            new QuestionViewModel 
            {
                Title = "Question 1",
                PossibleAnswers = new[] 
                { 
                    "Answer 1 to question 1", 
                    "Answer 2 to question 1" 
                }
            },
            new QuestionViewModel 
            {
                Title = "Question 2",
                PossibleAnswers = new[]
                { 
                    "Answer 1 to question 2", 
                    "Answer 2 to question 2",
                    "Answer 3 to question 2",
                }
            },
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(IEnumerable<QuestionViewModel> questions)
    {
        // TODO : Process the answers. Here for each element of the 
        // questions collection you could use the Answer property
        // in order to fetch the answer from the user.
        return Content("Thqnks for submitting the questionnaire", "text/plain");
    }
}
@model IEnumerable<QuestionViewModel>
@using (Html.BeginForm())
{
    <div>
        @Html.EditorForModel()
    </div>
    <input type="submit" value="submit answers" />
}
@model QuestionViewModel

<h2>@Model.Title</h2>
@Html.HiddenFor(x => x.Title)
@foreach (var item in Model.PossibleAnswers)
{
    @Html.RadioButtonFor(x => x.Answer, item)
    @item
}