Двоеточие в URL-адресе вашего первого примера вызовет ошибку (неверный запрос), поэтому вы не сможете сделать именно то, что ищете. Кроме этого, использование DateTime в качестве параметра действия вполне возможно.
Если вы используете маршрутизацию по умолчанию, эта третья часть вашего примерного URL-адреса получит значение DateTime в качестве параметра {id}. Таким образом, ваш метод Action может выглядеть так:
public ActionResult Index(DateTime? id)
{
return View();
}
Вы, вероятно, захотите использовать Nullable Datetime, как я, поэтому, если этот параметр не включен, это не вызовет исключения. Конечно, если вы не хотите, чтобы он назывался «id», добавьте еще одну запись маршрута, заменив {id} на ваше имя.
Это все, что вам нужно сделать, если текст в URL-адресе будет проанализирован до допустимого значения DateTime. Что-то вроде следующего отлично работает и будет выбрано в вашем методе Action без каких-либо ошибок:
<%=Html.ActionLink("link", "Index", new { id = DateTime.Now.ToString("dd-MM-yyyy") }) %>
Загвоздка в данном случае, конечно, в том, что я не учел время. Я не уверен, что есть какие-либо способы отформатировать (действительную) строку даты со временем, не представленным двоеточиями, поэтому, если вы ДОЛЖНЫ включить время в URL-адрес, вам может потребоваться использовать свой собственный формат и проанализировать результат обратно в DateTime вручную. Допустим, мы заменили двоеточие на "!" в ссылке действия: new { id = DateTime.Now.ToString("dd-MM-yyyy HH!mm") }.
Ваш метод действия не сможет проанализировать это как дату, поэтому лучше всего в этом случае, вероятно, принять его как строку:
public ActionResult Index(string id)
{
DateTime myDate;
if (!string.IsNullOrEmpty(id))
{
myDate = DateTime.Parse(id.Replace("!", ":"));
}
return View();
}
Редактировать: Как отмечено в комментариях, есть и другие решения, которые, возможно, лучше моего. Когда я первоначально написал этот ответ, я полагаю, что пытался как можно лучше сохранить суть формата даты и времени, но, очевидно, кодирование URL-адресов было бы более правильным способом справиться с этим. +1 к комментарию Влада.
person
Kurt Schindler
schedule
03.08.2009