我几乎感到尴尬,我无法让它发挥作用。我有这样的模型:
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
提前致谢,
雷
答案 0 :(得分:1)
模型绑定器只能看到从HTML表单发布的表单值,这些表单值仅来自表单元素。这不会产生这样的元素:
@Html.Test1
这可能会显示视图绑定的值(它确实是这样吗?我从未见过这样做过,也许应该是@Model.Test1
?)但是需要有一个HTML表单元素某种方式将值发回服务器。 (input
,select
,hidden
等等。)
为了好玩,请查看浏览器中生成的HTML。它们只是带有值的标准表单元素,没有任何东西可以将整个模型存储在任何地方。模型绑定器只是尝试根据HTML表单发送的名称/值对智能地重新构建模型。
尝试在表单中添加隐藏字段:
@Html.LabelFor(model => model.Test1)
@Model.Test1
@Html.HiddenFor(model => model.Test1)
这应该在表单中创建一个input type="hidden"
,该值会在将值发布到控制器操作时包含在内。