2013-09-05 1 views
0

Мы все знаем о проблемах, с которыми мы сталкиваемся, когда речь заходит о разных культурах пользовательского интерфейса, чтобы отображать даты. Но при публикации у нас также есть эта проблема с тех пор, как при публикации, ASP.NET MVC на самом деле не «автоматически» связывает формат, который дается в любом удобном для него виде.Календарь JQuery и MVC datetime submit

Мой вопрос в том, как я могу отправить назад дату в формате yyyy/MM/dd, чтобы она могла корректно привязываться к свойству модели?

Я хочу отобразить формат даты в формате пользовательского интерфейса того, что такое культура (например, Великобритания/США и т. Д.), И дать пользователю возможность выбрать дату из календаря jquery как обычно. Но только при публикации, хочу ли я сделать «коррекцию»

Каков наилучший способ сделать это?

ответ

1

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

Helper:

public static CultureInfo UserCultureInfo() 
{ 
    // Retrieves the user culture info based on the browser request 
    var userLanguages = HttpContext.Current.Request.UserLanguages; 

    CultureInfo ci; 

    if (userLanguages.Length > 0) 
    { 
     try 
     { 
      ci = new CultureInfo(userLanguages[0]); 
     } 
     catch (CultureNotFoundException) 
     { 
      ci = CultureInfo.InvariantCulture; 
     } 
    } 
    else 
    { 
     ci = CultureInfo.InvariantCulture; 
    } 

    return ci; 
} 

HTML (Razor View):

@{ 
    System.Globalization.CultureInfo curInfo = Helpers.UserCultureInfo(); 
} 

<!-- You need to change the file to be loaded based on the Culture information returned above --> 
@Html.Script("DatePicker/i18n/jquery.ui.datepicker-en-GB") 

<!-- The hidden field should be the one posted back to the Controller --> 
<input type="hidden" name="myDate" id="myDate" value="" /> 

<!-- This one is just to display the DatePicker --> 
<input type="text" id="myDatePickerField" name="myDatePickerField" /> 

JS:

$("#myDatePickerField").datepicker({ 
    altField: "#myDate", 
    altFormat: "yy-mm-dd", // The date sent will be in the YYYY-MM-DD format (refer to the HTML code to understand this bit) 
    dateFormat: "dd/mm/yy" // As I'm in the UK, I set the default format to DD/MM/YYYY 
}); 

Это просто STA rt, идея о том, как вы можете добиться ожидаемого результата. Конечно, вам нужно будет реализовать изменения, чтобы завершить его и поместить на свой веб-сайт. Как вы можете обнаружить информацию о локальном пользователе и применить ее к своему решению, это немного более широкое и сложное. В Интернете есть множество советов и руководств.

+0

Спасибо за быстрый и приятный ответ MelanciaUK. Вопрос: Где и как я могу получить/инициализировать скрипты языка? Кроме того, altFormat - как это работает? Я имею в виду, будет ли он использовать его, когда страница возвращается к контроллеру для форматирования даты и времени в формате, который я хочу, чтобы он мог корректно анализироваться связующим ?. Наконец - что такое altField, на который вы ссылаетесь? в настоящее время я просто так: var dateFormatStr = 'yy/mm/dd' $ ('# NextPayDate'). datepicker ({dateFormat: dateFormatStr}); что я не хочу явно. –

+0

Я собираюсь отредактировать свой ответ. Всего секунду. – melancia

+1

Когда пользователь выбирает дату в 'DatePicker', он заполняет альтернативное поле в формате, который вы установили' (YYYY-MM-DD) '. Оба поля будут отправлены обратно в «Контроллер». Там вы должны рассмотреть скрытое поле в качестве выбранной даты. – melancia