Anouar2002 Ответов: 0

Проблема с 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} во время отладки

0 Ответов