ASP.NET MVC3: форматы DateTime по-прежнему остаются проблемой в представлении - PullRequest
0 голосов
/ 21 декабря 2011

Я успешно переопределил формат даты для использования британского формата на контроллерах.

Таким образом, публикация работает для правильной даты.

@Html.ActionLink("Previous", "TimeTable", "RoomBookings", new { ViewDate = ViewBag.Date.AddDays(-1) } )

Однако, на мой взгляд, у меня есть вышеперечисленное, и добавление дня - это добавление к месяцу!

Ака, просто вызов ссылки на действие с той же датой приведет к ее постоянному обращению.

Есть ли способ применить этот британский формат даты и к представлению?

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

Один из способов сделать это - переопределить культуру в общем базовом контроллере, от которого ваш контроллер унаследует, вот так:

public abstract class CommonControllerBase : Controller
{


    protected override void ExecuteCore()
    {
        var culture = CultureInfo.CreateSpecificCulture("en-GB");
        var t = Thread.CurrentThread;
        t.CurrentCulture = culture;
        t.CurrentUICulture = t.CurrentCulture;

        base.ExecuteCore();
    }
}

Тогда он всегда будет в формате Великобритании, так что вы можете иметьпосмотрите на это следующим образом:

<label>@ViewBag.Date</label>
@Html.ActionLink("Test", "Test", new { ViewDate = ViewBag.Date.AddDays(-1) } )

и действие контроллера, которое выглядит следующим образом:

public ActionResult Test(DateTime viewDate)
{
    ViewBag.Date = viewDate;
    return View("Index");
}

, и оно должно правильно делать с датами

1 голос
/ 21 декабря 2011

Поскольку ViewBag использует динамический тип, среда выполнения будет выводить тип данных, и я предполагаю, что он принимает формат США.

Это можно обойти, если использовать строго типизированные представления и явно объявить свойство как DateTime.

В качестве альтернативы, я полагаю, вы могли бы создать свой собственный помощник HTML для вывода этих ссылок.

...