Как передать дату через URL, чтобы мои действия читались в MVC? - PullRequest
10 голосов
/ 07 декабря 2009

Как передать дату через URL?

Вот что я пытаюсь сделать, поскольку, как вы увидите, в дате используются косые черты, которые недопустимы в URL

http://localhost/Controller/Action/id=0d5375aa-6d43-42f1-91f0-ea73d9beb361&date=02/12/2009

Ответы [ 4 ]

17 голосов
/ 07 декабря 2009

Стандарт ISO 8601 - это гггг-ММ-дд, который является однозначным и не содержит недопустимых символов URL, и отлично работает в DateTime.Parse / TryParse.

Другой вариант - использовать любой формат, который вы хотите, и просто кодировать URL-адрес, используя HttpServerUtility.UrlEncode / UrlDecode.

4 голосов
/ 07 декабря 2009

Вы можете передать дату в строке запроса, используя определенный формат, скажем, ггггммдд, а затем правильно проанализировать ее в контроллере.

&date=02/12/2009
change to
&date=20091202   (yyyymmdd)

Вы можете создать оболочку вокруг объекта DateTime, который был создан с использованием этого нового формата, или просто проанализировать его самостоятельно в Controller.

public MyWrapperDate(int date)
{
    int year = date / 10000;
    int month = ((date - (10000 * year)) / 100);
    int day = (date - (10000 * year) - (100 * month));

    this.DateTimeObject = new DateTime(year, month, day);
}
0 голосов
/ 07 декабря 2009

MVC использует текущую культуру при генерации моделей URL и привязки. Это имеет смысл в некоторых сценариях (например, когда у вас есть текстовое поле и пользователь вводит туда дату), но часто возникают проблемы. Если у вас разные культуры, то будет проще, если значения всегда будут в формате инвариантной культуры.

В вашем случае я бы передал значение в виде строки, представленной инвариантной культурой. Тогда я бы использовал CustomModelBinder для заполнения свойства в модели.

0 голосов
/ 07 декабря 2009

Вы можете закодировать его URL-адресом, но передача DateTime в виде строки всегда немного сложнее, потому что вы можете столкнуться с ошибками разбора, если запрос когда-либо пересекает границы культуры.

Лучший вариант - преобразовать DateTime в Ticks и передать это число.

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