MVC模型未传递给控制器

时间:2014-03-18 18:33:46

标签: asp.net-mvc view model controller

我几乎感到尴尬,我无法让它发挥作用。我有这样的模型:

public class Test
{
  public string Test1 {get; set; }
  public string Test2 {get; set; }
}

我有一个剃刀视图,可正确显示Test1和Test2。 Test1显示如下:

@Html.LabelFor(model => mode.Test1)
@Html.Test1

Test2显示如下:

@Html.LabelFor(model => model.Test2)
@Html.EditorFor(model => model.Test2)

即。我只想显示Test1,但希望用户能够编辑Test2。

这些是在一种形式:

@using(Hmtl.BeginForm("Action1", "Controller1", FormMethod.Post)

在Controller1.Action1中,它接收模型:

public ActionResult Action1(Test m)
{

}

但是在这里m.Test1为null,m.Test2被正确填充。 m.test1在视图中正确显示。

Am confused.com

提前致谢,

1 个答案:

答案 0 :(得分:1)

模型绑定器只能看到从HTML表单发布的表单值,这些表单值仅来自表单元素。这不会产生这样的元素:

@Html.Test1

这可能会显示视图绑定的值(它确实是这样吗?我从未见过这样做过,也许应该是@Model.Test1?)但是需要有一个HTML表单元素某种方式将值发回服务器。 (inputselecthidden等等。)

为了好玩,请查看浏览器中生成的HTML。它们只是带有值的标准表单元素,没有任何东西可以将整个模型存储在任何地方。模型绑定器只是尝试根据HTML表单发送的名称/值对智能地重新构建模型。

尝试在表单中添加隐藏字段:

@Html.LabelFor(model => model.Test1)
@Model.Test1
@Html.HiddenFor(model => model.Test1)

这应该在表单中创建一个input type="hidden",该值会在将值发布到控制器操作时包含在内。