Вам необходимо удалить его из состояния модели, если вы собираетесь изменить его значение в действии 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, вам нужно удалить его из состояния модели, как показано.