2010-10-15 9 views
1

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

objRecord.NextElectionDate = DateTime.ParseExact (коллекция ["NextElectionDate1"], "dd/mm/yyyy", null) ;

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

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

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

alt text

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

+0

Посмотрите на это сообщение: http://stackoverflow.com/questions/3948743/how-to-make-this-date-valid-in-c – awrigley

+0

Вы получаете эту ошибку, потому что ваши базы данных отправил неверные даты. Даты недействительны для базы данных, потому что у вас есть ошибка в форматировании даты. ModelState является ложным, потому что вы передаете недопустимые даты в поле с типом данных DateTime. – awrigley

+0

У вас по какой-либо причине возникла проблема с форматированием даты. Найдите образец, который работает, и используйте его. – awrigley

ответ

1

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

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

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

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

Простое решение ВСЕГДА следите за тем, чтобы даты, которые вы используете в вашем коде редактирования и вставки, были отформатированы для культуры США, то есть mm/dd/yyyy.

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

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

Это именно то, что происходит здесь.

+0

любые обновления по этому вопросу? Это слишком важно для всех разработчиков, я думаю! –

+0

Лалит: у нас нет достаточной информации от вас. Может быть, вам не достаточно важно предпринять необходимые усилия? – awrigley

+0

Хорошо, но, еще одна вещь. Я думаю, что эта ошибка является временем выполнения, и я думаю, что она выбрана Model в моем приложении mvc. Я стараюсь изо всех сил, но получаю разочарование! пожалуйста, руководство. –

1

Попробуйте указать culture and uiCulture in your web.config.

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

public ActionResult Foo(DateTime? nextElectionDate1) 
{ 
    // no need to parse parameters 
    return View(); 
} 
4

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

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

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

+0

+1 Спасибо, Дэвид. Это решило мою проблему сопоставления значения текстового поля на странице MVC с параметром действия контроллера. –

+0

Этот ответ разрешил мою проблему, для меня это работало при подключении к базе данных live (размещенной на лазури) в Visual Studio, но не работал бы сразу после развертывания и подключался к одной и той же базе данных, поэтому он не мог быть настройкой базы данных. – Hoody

+0

Ответ решил мою проблему, я пытался добавить для культуры en-IN, и она отлично работала. System.Web в web.config –

1
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. Надеюсь, что это сработает

+0

Я решил проблему с помощью этого решения. –

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