проблема даты и времени после развертывания приложения asp.net mvc - PullRequest
1 голос
/ 15 октября 2010

Я разработал приложение asp.net mvc 2 + C #. он имеет функциональность создания, в которой есть поле datetime. Если локально я запускаю приложение, оно работает нормально. но если я развертываю его на сервере IIS (v 5.1), он не принимает дату более 12 (если дает 14/10/2010) не будет работать), это означает, что он изменяет формат даты во время выполнения на iis как MM / дд / гггг. Но в коде вставки я конвертирую формат в «дд / мм / гггг» по следующей строке:

objRecord.NextElectionDate = DateTime.ParseExact (collection ["NextElectionDate1"], "dd / mm / yyyy", null);

Я проверил региональные настройки, это то же самое, где я запускаю локально приложение (в США). Никаких исключений не получалось. Также я пытался развернуть приложение на iis 6.0, где оно отлично работает. Но на стороне клиента доступна версия IIS 5.1, поэтому приложение должно как-то запускаться на IIS 5.1. Является ли эта дата проблемой причиной версии IIS. Как решить эту проблему?

Отредактировано 1: alt text

У меня есть такой код:

alt text

Отредактировано 2: Привет еще раз! пока я отлаживаю приложение, я получаю ModelState.IsValid, равный «false», при попытке вставить информацию о сотруднике в «Create» Action. Как узнать, что происходит в ModelState.IsValid? почему это становится "ложным"? Пожалуйста, руководство

Ответы [ 4 ]

5 голосов
/ 21 января 2011

У меня только что была эта ошибка на моем сервере, и я изменил культуру в моем web.confg. Я в Великобритании, поэтому я положил:

<globalization
requestEncoding="iso-8859-1"
responseEncoding="iso-8859-1"
culture="en-GB" uiCulture="en-GB" />

под узлом <system.web>.

3 голосов
/ 17 октября 2013
using System.Globalization;
using System.Threading;

  protected void Application_BeginRequest(Object sender, EventArgs e)
{    
  CultureInfo newCulture = (CultureInfo)     
System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
  newCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
  newCulture.DateTimeFormat.DateSeparator = "-";
  Thread.CurrentThread.CurrentCulture = newCulture;
}

Поместите этот код в файл global.asax.cs. Надеюсь, что это будет работать

1 голос
/ 15 октября 2010

Ваша проблема не имеет ничего общего с IIS.Это классическая проблема форматирования даты и времени в базе данных.

Более 12 дает ответ: в году всего 12 месяцев!Итак:

НЕ форматируйте дату в «коде вставки» во что-либо, кроме формата США, поскольку хранилище вашей базы данных будет ожидать даты в формате США.

Я видел это время иснова с базами данных MS Access.

Простое решение - ВСЕГДА убедиться, что даты, которые вы используете в коде «Редактировать и вставить», были отформатированы для культуры США, т. Е. Мм / дд / гггг.

Дарин Димитров прав насчетМодель Binder практикует он упоминает.Но более серьезной проблемой здесь является квадратный колышек в круглой дыре: поскольку Microsoft является американской компанией, их базы данных нуждаются в датах в американском формате.

В MS Access, если ввод данных проходит через форму, выхорошо, просто полагаясь на настройки культуры вашего ПК.Однако, если вы вставляете данные с использованием кода VBA, вам необходимо явно отформатировать даты в формате США.

Именно это и происходит.

1 голос
/ 15 октября 2010

Попробуйте указать culture и uiCulture в вашем web.config .

Также было бы лучше использовать связыватель модели по умолчанию и параметры действия вместо ручного анализа дат:

public ActionResult Foo(DateTime? nextElectionDate1)
{
    // no need to parse parameters
    return View();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...