public class SearchForm {
//Note: Property is nullable
public DateTime? CurrentViewDate {get;set;}
public DateTime StartDate {get;set;}
}
//In the controller
//[GET]
public ActionResult Index()
{
}
//[POST]
public ActionResult Index(SearchForm formModel)
{
if(formModel.CurrentViewDate == null)
formModel.CurrentViewDate = DateTime.Now.AddDays(1d);
else
formModel.CurrentViewDate = formModel.CurrentViewDate.AddDays(1d);
formModel.StartDate = DateTime.Now;
}
//In view
@Html.HiddenFor(c => c.CurrentViewDate).
<input id="SearchForm_CurrentViewDate" name="SearchForm.CurrentViewDate"
type="hidden" value="5/25/2012 11:59:59 PM" />
<input type="submit" name="btnNext" id="btnNext" value="Go Increment" />
但是,当我点击提交时,值确实会增加,但隐藏的字段保存前一个值,并且它显示正确值的唯一方法是 如果这样做@ Html.HiddenFor(c =&gt; c.CurrentViewDate.Value),但后来就 重新发布formModel.CurrentViewDate具有null值,因为绑定名称不同。
有什么想法吗?感觉它从StartDate属性而不是CurrentViewDate属性
获取日期时间值答案 0 :(得分:2)
如果要修改它,则需要从ModelState中删除该值:
public ActionResult Index(SearchForm formModel)
{
ModelState.Remove("CurrentViewDate");
if(formModel.CurrentViewDate == null)
{
formModel.CurrentViewDate = DateTime.Now.AddDays(1d);
}
else
{
formModel.CurrentViewDate = formModel.CurrentViewDate.AddDays(1d);
}
return View(model);
}
您需要执行此操作的原因是因为所有Html帮助程序(如TextBoxFor,HiddenFor,CheckBoxFor,...)在绑定其值时首先查看ModelState,然后查看模型。此行为是设计使然。因此,在您的POST操作中,ModelState中已经存在一个值(与请求一起发送的值),这是正在使用的值。
每当您尝试在POST控制器操作中修改视图模型上的某些属性时,并期望此更改反映在值中,请不要忘记ModelState。