【发布时间】:2019-08-06 14:21:56
【问题描述】:
我在将模型从表单传递到控制器时遇到问题(或者我不明白表单的工作原理)。我有一个名为EmptySurveyViewModel 的模型,它有一个由EmptyQuestionViewModel 组成的列表。这个问题模型有一个属性Answer,它是空的,将由表单填写。但是,一项调查有很多问题,最后我想将一个模型传递给控制器 EmptySurveyViewModel,其中包含 EmptyQuestionViewModel 的列表,每个都有 Answer 属性。该属性可以用不同的方式填写,具体取决于问题的类型。我的问题是,如果我没有 if 语句(见下文),所有问题都显示为单选题,并且传递给控制器的模型只有填充了 Answer 属性的问题。但是,当我添加if(我打算添加其他ifs,以捕获所有可能的类型)时,只列出了一些问题,当我提交表单时,模型完全为空(不是@987654331 @,但是它的属性Questions 是null。我认为第一种情况(没有if)可以稍后由其他逻辑处理,但是返回一个空列表不能。为什么会这样?
模型:
public class EmptySurveyViewModel {
//Something else here
public List<EmptyQuestionViewModel> Questions { get; set; }
}
public class EmptyQuestionViewModel {
//Something else here
public string Answer { get; set; }
}
观点:
@model cq.Models.EmptySurveyViewModel
@using (Html.BeginForm("New", "Client", FormMethod.Post, new { role = "form" })) {
for (int i = 0; i < Model.Count(); i++) {
if (Model.Questions[i].Type == "Single choice") {
@Html.RadioButtonFor(m => m.Questions[i].Answer, "foo")
@Html.RadioButtonFor(m => m.Questions[i].Answer, "bar")
}
<br />
}
<input type="submit" value="submit" />
}
以及控制器中的Action:
[HttpPost]
public ActionResult New(EmptySurveyViewModel survey) {
//Do something with the survey here
}
【问题讨论】:
-
please check with FormCollection add in Action parameter like eg, [HttpPost] public ActionResult New(EmptySurveyViewModelsurvey,FormCollection fc) { //对调查做点什么 } 如果表单中出现值?
-
@jishansiddique 事实证明这是模型绑定器不理解模型的问题,正如 Andrei 所建议的那样。不过谢谢你的建议:)
标签: c# html asp.net-mvc razor