在不使用任何查询参数的情况下制作“下一步”和“上一步”按钮?

问题描述

| 我想显示三个月的日历,用“下一步”按钮显示未来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值,则需要将其从模型状态中删除,如图所示。