Как передать дату через URL-адрес, чтобы мое действие читалось в MVC?

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

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

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

4 ответов


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

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

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

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

на ISO 8601 standard-yyyy-MM-dd, который является однозначным и не содержит недопустимых символов URL и отлично работает в DateTime.Анализа/Метод Tryparse.

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


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

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


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

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