2016-11-10 2 views
0

Я борюсь с этим в течение нескольких часов, У меня есть модель с этим свойствомИзменить DateTime Информация о культуре для конкретного ввода даты и времени

public DateTime ValidTo { get; set; } 

Я отображать это свойство в View с измененным форматом

@Html.TextBoxFor(m => Model.ValidTo, "{0:dd.MM.yyyy}" }) 

И проблема начинается, когда я отправлю форму, , потому что свойство Model.ValidTo имеет значение dd/MM/yyyy. Переключение дня и месяца. Это должно быть MM/dd/yyyy.

Как сопоставить собственный формат даты в формате даты в модели? Могу ли я установить пользовательский формат даты в модели? Я не могу установить культуру для всей страницы, мне нужно сделать это только для одной модели или лучше сделать это для конкретного свойства datetime в модели.

Любая идея?

Эксперимент 1 - Custome модель данных Binder - Не работает

Я попытался решение от этого ответа DisplayFormat ApplyFormatInEditMode

[DateTimeFormat(Format = "dd.MM.yyyy")] 
     public DateTime ValidTo { get; set; } 

public class DateTimeFormatAttribute : ValidationAttribute 
    { 
     public string Format { get; set; } 

     public override bool IsValid(object value) 
     { 
      if (value == null) 
       return true; 

      DateTime val; 
      try 
      { 
       val = DateTime.ParseExact(value.ToString(), Format, null); 
      } 
      catch (FormatException) 
      { 
       return false; 
      } 

      //Not entirely sure it'd ever reach this, but I need a return statement in all codepaths 
      return val != DateTime.MinValue; 
     } 
    } 

но в представлении, отображается формат даты и времени по умолчанию, и после подачи формата dd.MM.yyyy , модель ведет себя одинаково.

+1

Вам нужно будет создать настраиваемое связующее устройство –

+0

@StephenMuecke Я пробовал, но не добился успеха, не знаю, что я делаю неправильно:/ – Muflix

+0

Возможный дубликат [Установить культуру в приложении ASP.Net MVC] (http: /stackoverflow.com/questions/1560796/set-culture-in-an-asp-net-mvc-app) –

ответ

0

Try добавить аннотацию:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
+0

Я пробовал это раньше, но это не работает. Кажется, что DataFormatString не применяется. – Muflix

+0

Это поле WebForms. –

+0

@PanagiotisKanavos I ment в представлении, а также в модели. – Muflix

0

В качестве обходного пути я решил его таким образом

В модели, изменение модели DateTime свойство string

public string ValidTo { get; set; } 

В контроллере

DateTime dateTime; 
if (!DateTime.TryParse(model.ValidTo, 
    CultureInfo.GetCultureInfo("cs-CZ"), 
    DateTimeStyles.None, out dateTime)) 
{ 
     ModelState.AddModelError(string.Empty, "ValidTo date field is not valid."); 
} 

model.ValidTo = dateTime.ToString(); // optional, it depends on the use later 

if (ModelState.IsValid) { ... } 
+0

Не очень хорошая идея. Ваша первоначальная проблема была вызвана жестко запрограммированной локалью (сервером). Локаль запроса определяется настройками браузера (например, предпочтительным языком), настройками страницы, настройками конфигурации или их можно установить динамически, например, для каждого пользователя или на основе маршрута (фрагмент '/ en-US /', который вы видите в URL-адресах). Если вы знаете правильный язык, задайте его по запросу –

+0

, но почему мне нужно знать язык запросов? Я хочу показать эту конкретную локаль (она идет как строка для представления и как строка обратно к модели) всем пользователям, поэтому она жестко закодирована. – Muflix

+0

. В повторяющемся вопросе отображается почти * все * способы динамического изменения языкового стандарта , на основе маршрутов, доменов, пользовательских настроек и т. д. –

Смежные вопросы