【发布时间】:2015-06-03 16:33:14
【问题描述】:
我的问题是从我的控制器传递到我的视图的强类型数据是空的(它的所有属性都是空的)。
我还想将单选按钮(标记为 QUESTION2)中的选定值绑定到模型属性“GivenAnwser”,但它似乎也不起作用。
传递的类型是 ViewModel
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
QuestionViewModel question = Manager.GetQuestion();
return View(question);
}
[HttpPost]
public ActionResult Index(QuestionViewModel question,Anwser givenAnwser)
{
//QuestionViewModel is returned but all it's properties are null.
return View(question);
}
}
查看
@model Quiz.ViewModels.QuestionViewModel
@{
ViewBag.Title = "Home Page";
}
@Html.Label("Question:")
@if (Model.CorrectAnwser != null)
{
//some code
}
@Html.DisplayFor(model => model.Question.Text)
//I have tried with Hidden fields and without them
@Html.HiddenFor(model => model.Question)
@Html.HiddenFor(model => model.Anwsers)
@using (Html.BeginForm("Index", "Home"))
{
foreach (var anwser in Model.Anwsers)
{
//QUESTION 2
<input type="radio" name="givenAnwser" value="@anwser" />
<label>@anwser.Text</label>
<br />
}
<input type="submit" value="Check!" />
}
问题视图模型
public class QuestionViewModel
{
public QuestionViewModel()
{
this.Anwsers = new List<Anwser>();
}
public Question Question { get; set; }
public List<Anwser> Anwsers { get; set; }
public Anwser GivenAnwser { get; set; }
public bool CorrectAnwser { get; set; }
}
编辑:
ModelState 包含错误:
“从类型 'System.String' 到类型 'Quiz.Models.Anwser' 的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换。”
【问题讨论】:
-
应该使用隐藏字段。 QuestionViewModel 是否具有无参数的公共构造函数,并且属性(Pytanie、Odpowiedzi)是否也可以读/写?是否将正确的值发布到隐藏字段?
-
@RobertMcKee 是的。我已将 ViewModel 的代码添加到帖子中。它确实将正确的值发布到隐藏字段。编辑:ModelState 无效。
-
隐藏字段必须在表单内...这就是将发布到服务器的内容...
-
我已经移动了 foreachloop 下的隐藏字段,但是没有任何变化。
-
这只是一个提示......让我们一起思考,你有一个数组,怎么可能将它绑定到隐藏字段?另一个提示,Question 是一个复杂类型,隐藏的值只是一个字符串……你看到了吗?
标签: c# asp.net-mvc viewmodel