Как передать дату через 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 для заполнения свойства в модели.