Невозможно сохранить в БД, строка не была распознана как допустимый DateTime MVC - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть два текстовых поля, которые включены на основе флажка.Если checked == true, то включите редактирование.До этого момента все в порядке.Однако, когда я нажимаю кнопку Submit , чтобы сохранить ее в базе данных, она не работает.Я смог сохранить его только с одним редактируемым текстовым полем.Теперь, когда у меня есть два редактируемых окна, это не работает.

Проблема:

Вызов ajax отправляет даты и идентификатор обратно в метод контроллера.Тем не менее, он не сохраняется в БД.В UpdatePlannedDate я установил пару точек останова, они полностью пропускают первый цикл forEach .

Исключение, которое оно выдает: Строка не была распознана как действительный DateTime.

Класс модели:

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? Date1{ get; set; }

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? Date2{ get; set; }

public string R_ID { get; set; }
public string U_ID { get; set; }
public string C_ID { get; set; }

Класс контроллера:

 [HttpPost]
    public JsonResult UpdatePlannedDate(string ids, string Date1, string Date2)
    {
        model = new Hello();
        Entity db = new Entity();
        List<Hello> list = new List<Hello>();
        string[] IDS = ids.Split(',');
        string[] Date1S = Date1.Split(',');
        string[] Date2S = Date2.Split(',');

        try
        {
            for (int i = 0; i < IDS.Length; i++)
            {
                if (IDS[i] != null && IDS[i] != "")
                {
                    Hello item = new Hello { R_ID = IDS[i], Date_Two = DateTime.Parse(Date2S[i]), Date_One = DateTime.Parse(Date1S[i]) };
                    list.Add(item);
                }
            }
            foreach (var row in db.table1)  
            {
                foreach (var row2 in db.table2) 
                {
                    if (row.U_ID == row2.C_ID)
                    {
                        foreach (var item in list)
                        {
                            if (row.U_ID == item.R_ID)
                            {
                                var cd = db.Table2.Where(x => x.C_ID == row.U_ID).First();
                                cd.PlanDate = Convert.ToDateTime(item.Date_Two);
                                cd.PlanDate = Convert.ToDateTime(item.Date_One);
                            }
                        }
                    }
                }
            }
            db.SaveChanges();
            return Json(new { success = true, msg = "Updated" });
        }
        catch (Exception ex)
        {
            return Json(new { success = false, msg = ex.Message });
        }
    }

Просмотр класса:

$(document).ready(function () {
        var ids = "";
        var date1 = "";
        var date2 = "";

        //Save to DB
        $("#btnSubmit").bind("click", function () {
            createUpdateArrays();
            var url = "/Sample/UpdatePlannedDate";
            $.ajax({
                type: "POST",
                url: url,
                data: { ids: ids, date1: date1, date2: date2 },
                success: function (data) {
                    if (data.success) {
                        $('.msg').html('Updated');
                    }
                    else {
                        alert("error");
                    }
                }
            });

            ids = "";
            date1 = "";
            date2 = "";
        });
        function createUpdateArrays() {
            var i = 0;
            $('input.remedy-id:checkbox').each(function () {
                if ($(this).is(':checked')) {
                    var rid = $(this).attr("id");
                    $('.date2').each(function () {
                        var did = $(this).attr("id");
                        if (did === rid) {
                            var date_2 = $(this).val();
                            ids += rid + ",";
                            date2 += date_2 + ",";
                        }
                    });
                    $('.date1').each(function () {
                        var tid = $(this).attr("id");
                        if (tid === rid) {
                            var date_1 = $(this).val();
                            ids += rid + ",";
                            date1 += date_1 + ",";
                        }
                    });
                };
            });
        };

    <tr id="home">
        <td><input class="id" type="checkbox" id=@item.R_ID/></td>
        <td>@Html.DisplayFor(x => item.R_ID)</td>
        <td><input class="date1" id=@item.R_ID type="text" value='@(item.Date1 == null ? "" : Convert.ToDateTime(item.Date1).ToString("MM/dd/yyy"))' readonly="readonly" /></td>
        <td><input class="date2" id=@item.R_ID type="text" value='@(item.Date2 == null ? "" : Convert.ToDateTime(item.Date2).ToString("MM/dd/yyy"))' readonly="readonly" /></td>
    </tr>

1 Ответ

0 голосов
/ 08 декабря 2018

1) Какая у вас ORM?Entity Framework?

2) Попробуйте отладить строку:

 Hello item = new Hello { R_ID = IDS[i], Date_Two = DateTime.Parse(Date2S[i]), Date_One = DateTime.Parse(Date1S[i]) };

3) Разве преобразование даты и времени там не выполняется дважды?Первая строка Hello = ... строка, вторая там

                            cd.PlanDate = Convert.ToDateTime(item.Date_Two);
                            cd.PlanDate = Convert.ToDateTime(item.Date_One);

4) Что изменится:

cd.PlanDate = item.Date_Two;
cd.PlanDate = item.Date_One;

?

5) Также нетлогическая ошибка в том, что здесь присвоено 2 значения одной переменной?

6) Есть ли у вас расширение javascript для ваших полей на стороне шаблона Razor?Какой формат он будет производить здесь, если вы выберете свое время из календаря?Соответствует ли оно вашей маске определения в классе модели?(

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 

)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...