Сделать кнопки Next и Prev без использования каких-либо параметров запроса? - PullRequest
0 голосов
/ 12 июня 2011

Я хочу отобразить календарь на три месяца с помощью кнопки «Далее», чтобы отобразить следующие 3 месяца, и кнопки «предыдущий», чтобы отобразить предыдущие 3 месяца. Моя модель содержит свойство с именем BeginDate, что его значением является дата первого дня текущего дня.месяц. Когда я нажимаю следующую кнопку, я добавляю три месяца к BeginDate и привязываю его к скрытому полю в моем представлении.и верните модель с новым BeginDate, но значение скрытого поля не изменилось.

Моя модель

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);
}

ПримечаниеЯ хочу сделать это без указания какого-либо параметра в моем URL

1 Ответ

2 голосов
/ 12 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...