Проблема с datetime в ASP MVC
Привет,
Я хочу сохранить атрибут Date с типом DateTime в своей базе данных, но у меня всегда есть это исключение :
ex. Message = " процедура или функция 'AddNewBestellung' ожидает параметр '@Date', который не был указан."
контроллер:
[HttpPost] public ActionResult Save_Bestellung(Bestellung bs) { var errors = ModelState.Values.SelectMany(v => v.Errors); try { if (ModelState.IsValid) { BestellungManagement bdb = new BestellungManagement(); if (bdb.AddBestellung(bs)) { return View("~/Views/Bestellung/Index.cshtml"); ViewBag.Message = "Bestellung saved Successfully"; ModelState.Clear(); } } return RedirectToAction("Index"); } catch { return JavaScript("alert('Order is Wrong ! Please verify your data !!')"); } }
Класс BestellungManagement:
public bool AddBestellung(Bestellung bs) { try { using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DeliveryCon"].ToString())) { using (SqlCommand cmd = new SqlCommand("AddNewBestellung", con)) { cmd.Parameters.AddWithValue("@Date", SqlDbType.DateTime2).Value = bs.Date; con.Open(); int i = cmd.ExecuteNonQuery(); con.Close(); if (i >= 1) return true; else return false; } } } catch(Exception ex) { string e = ex.Message; return false; } }
В моделях Bestellung. cs :
public DateTime Date { get; set; }
В Схеме Базы Данных :
[Date] DATETIME NOT NULL,
по мнению :
<label>DATE : </label> <input id="datepicker" name="Text" type="text" value="mm/dd/yyyy" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'mm/dd/yyyy';}" required=""
функция datepicker :
<script> $(function() { $("#datepicker").datepicker({ minDate: 0 }); }); </script>
Что я уже пробовал:
Я попытался изменить тип даты с DateTime на datetime2, но проблема не решена. Я думаю, что проблема связана с функцией JS, потому что при отладке параметр Date всегда получал нулевое значение для такого времени, как это : Дата = {10.02.2017 00: 00:00} когда я назначу сегодняшнюю дату.
F-ES Sitecore
Первое, что нужно сделать, это изменить свой код, чтобы правильно использовать AddWithValue, второй параметр - это значение, а не тип.
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v=vs. 110).aspx
Anouar2002
В моем коде вторым параметром является значение "SqlDbType.DateTime2).Value", во всяком случае, я не думаю, что проблема здесь, потому что он не работал, когда я писал так :
УМК.Параметры.AddWithValue ("@Date", bs. Date);
Richard Deeming
Если свойство вызывается Date
, почему вы установили имя вашего <input>
к "тексту"?
Имя входных данных должно совпадать с именем свойства, если вы хотите, чтобы привязка модели работала.
Anouar2002
о, Извините, я скопировал старую версию с моего представления, вход называется "дата", которая является именем свойства модели.
И когда я ставлю дату в качестве параметра Nullable DateTime, modelState получит значение "false", а ошибка будет "значение" 26.10.2017 " недопустимо для даты."
Richard Deeming
Это похоже на проблему с настройками культуры. Он отправляет дату в американском формате, но похоже, что ваш сервер ожидает другого формата.
Если это возможно, попробуйте отправить значение с помощью yyyy/MM/dd
формат.
В качестве альтернативы вы можете использовать собственный ввод даты[^], которая стремительно набирает обороты. поддержка браузеров[^]. (IE11 и desktop Safari не поддерживают его; текущая версия Firefox имеет поддержку за флагом, а следующая версия имеет глобальную поддержку.)
Anouar2002
Я тоже так думал, вот почему я попробовал dd/mm/yyyy и yyyy/mm/dd, но это тоже не сработало, я думаю, что проблема в тех 00:00:00, когда я получил bs.Дата = {25.10.2017 00: 00: 00} во время отладки