我有一个新的相当基本的视图/控制器的MVC 4应用程序。相关模型包含一对夫妇属性,我已将其映射到隐藏表单字段。当页面第一次渲染时(,例如通过HttpGet动作),它看起来都很好。但是,当通过选择提交按钮来完成表单时,呈现给操作的结果模型不再具有设置的隐藏字段值。这是一个详细的演练。回复后隐藏的表单字段不出现在MVC模型中
这里是模型的样品:
public class Application
{
public bool ShowSideBars { get; set; }
}
这里是初始控制器 * 行动 *(这似乎很好地工作):
[HttpGet]
public ActionResult Application()
{
var model = Request.ParseFromQueryString<Application>();
model.ShowSideBars = true;
return View(model);
}
这映射到查看如下:
<fieldset>
@Html.HiddenFor(m => m.ShowSideBars)
...
</fieldset>
这将导致以下加价到字段集里面被渲染:
<input data-val="true" data-val-required="The ShowSideBars field is required." id="ShowSideBars" name="ShowSideBars" type="hidden" value="True" />
注意:我当然希望我知道为什么MVC已决定加入”。 ..字段是必需的'内容,当我没有按要求标记,但这是另一个问题
这是活动在提交表单时调用的是。此时上述属性将不再设置为'true'。
[HttpPost]
public ActionResult Application(Application application)
{
// Other work done here
return View(application);
}
目前还没有定制型号粘结剂。另外,我测试了一些其他的数据类型,我看到了同样的事情。
有人可以解释为什么隐藏的表单值没有被返回?我只是做这一切都错了吗?
的'数据-VAL-required'被渲染,因为模型类型是'bool'。 Bools默认是必需的,它们必须是真或假。如果你不想看到data-val所需的数据,那么使这个属性成为'bool?'。 – danludwig 2012-03-19 19:15:32
另外,Data Annotations会将“必需”添加到任何不可为空的类型。 Ints和Bools将根据需要自动标记。 – 2012-03-19 19:17:07
@ danludwig好主意!谢谢。这将防止整个页面大小有点膨胀。 – JoeGeeky 2012-03-19 19:20:59