问题描述
|
我想显示三个月的日历,用“下一步”按钮显示未来3个月,用“上一步”按钮显示前3个月。我的模型包含一个名为
BeginDate
的属性,其值是当前3个月的第一天的日期。下一个按钮,我将三个月添加到ѭ0中,并将其绑定到视图中的隐藏字段。并以新的“ 0”返回模型,但隐藏字段的值未更改。
我的模特
public class MyModel
{
public DateTime BeginDate
{
get;
set;
}
}
我的控制器
[HttpGet]
public ActionResult Index()
{
return View(new MyModel());
}
[HttpPost]
public ActionResult Index(MyModel model)
{
model.BeginDate = model.BeginDate.AddMonths(3);
return View(model);
}
注意我想做到这一点而无需在我的网址中放置任何参数
解决方法
如果要在POST操作中修改其值,则需要将其从模型状态中删除:
[HttpPost]
public ActionResult Index(MyModel model)
{
ModelState.Remove(\"CurrentBegin\");
model.CurrentBegin = DateTime.Parse(Request.Form[\"CurrentBegin\"]).AddMonths(3);
return Index(model);
}
这样做的原因是因为HTML帮助器(例如TextBoxFor,HiddenFor等)将首先查看请求,如果在模型中存在相应的值。因为您处于POST动作中,所以POST主体中有一个旧的CurrentBegin
值,这就是隐藏帮助程序将使用的值,而不是您要放入模型中的值。那是设计使然,这就是助手的工作方式。如果要使用模型的值而忽略POSTed值,则需要将其从模型状态中删除,如图所示。