在MVC中,发布表单返回空模型

时间:2014-03-05 17:55:41

标签: c# asp.net-mvc

我有以下viewModel

 public class ExerciceViewModel
    {
        public string Code { get; set; }
        public string Titre { get; set; }
        public int QuestionCourante { get; set; }
    }

以下观点

@model MonEcoleVirtuelle.ViewModel.ExerciceViewModel

@{
    ViewBag.Title = "Test";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Test</h2>

@using (Html.BeginForm("test", "exercice", FormMethod.Post))
{

    @Model.Code <br />

    @Model.Titre<br />

    @Model.QuestionCourante<br />
    <br />
    <br />

    Model.Code = "Code Modifie";

    <input type="submit" value="Post Moi Ca!" name="fini" />

}

以及以下控制器方法

 [HttpPost]
        public ActionResult Test(ViewModel.ExerciceViewModel model)
        {
            if (ModelState.IsValid)
            {
                return Content(model.Code);
            }

            return View(model);
        }

[HttpGet]
public ActionResult Test()
{
    var vm = new ViewModel.ExerciceViewModel { Code = "code1", Titre = "Mon titre", QuestionCourante = 1 };

    return View(vm);
}

当我提交表单时,传递的模型为空,所有属性都被重置,不保留原始值。我错过了什么。

感谢

2 个答案:

答案 0 :(得分:3)

您的视图中未包含任何输入字段。

@Model.Code等仅输出字段的值。为了能够回发元素,他们需要成为表单元素,如输入。使用像

这样的东西
@Html.TextBoxFor(p=>p.Code)

创建可以回发的输入字段。

有关更完整的指南,请参阅http://msdn.microsoft.com/en-us/library/dd410596(v=vs.100).aspx

上的MSDN

答案 1 :(得分:3)

嗯,而不是只显示值的@Model.Code,你需要一些输入。

所以@Html.TextBoxFor(m => m.Code)例如

要管理集合,您可以执行以下操作:

@for (var i = 0; i < Model.Collection.Count; i++) {
  Html.TextBoxFor(m => Model.Collection[i].Property)
}