сохранить модальное сообщение в проблеме базы данных - PullRequest
0 голосов
/ 07 января 2020

Моя основная идея - показать данные из базы данных, а рядом с каждой строкой есть кнопка «принять» и «отклонить» .onClick, значение кнопки передается в контроллер и сохраняется в базе данных. Пока все хорошо, проблема в том, когда Я попытался добавить всплывающее окно с текстом ввода для добавления заметки. он должен появляться только тогда, когда я нажимаю только кнопку отклонения. Я открыл инструменты разработчика и обнаружил, что он пропускает двойное число от целого числа строк данных, и я не знаю, как передать идентификатор строки, в которой я нахожусь, значение отклоненной кнопки и, наконец, сообщение, которое будет написано в контроллер. Я попытался передать модальное значение в методе кнопки отклонения в контроллере, но оно проходит как ноль. Что я делаю неправильно? моя часть сценария организована или даже точна после добавления ajax или нет? Я ценю любую помощь. мой взгляд:

@model AllmyTries.Models.fulfillmentVM


<!-- page content -->


                                    @using (Html.BeginForm("Add_Fulfillment_Reject", "Feedback", FormMethod.Post))
                                    {
                                        @Html.AntiForgeryToken()
                                        <td>
                                            <button id="btnReject" class="btn btn-lg btn-danger" name="button" data-toggle="modal" data-target="#exampleModal" type="submit" onclick="reject(0)" value="0">Reject</button>
                                            @Html.Hidden("Request_ID", Model._Requests[i].Request_ID)
                                            @Html.Hidden("Status", Model._Requests[i].Status, new { id = "myEdit", value = "" })
                                        </td>

                                        <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
                                            <div class="modal-dialog" role="document">
                                                <div class="modal-content">
                                                    <div class="modal-header">
                                                        <h5 class="modal-title" id="exampleModalLabel">New message</h5>
                                                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                                            <span aria-hidden="true">&times;</span>
                                                        </button>
                                                    </div>
                                                    <div class="modal-body">
                                                        <form id="myform">

                                                            <div class="form-group">
                                                                <textarea class="form-control" id="message-text"></textarea>
                                                            </div>
                                                        </form>
                                                    </div>
                                                    <div class="modal-footer">
                                                        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                                                        <input type="reset" value="submit" class="btn btn-success" id="finalSave" />

                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    }


<!-- /page content -->


@section Scripts {
    <script>

        $('[name = "button"]').click(function () {
            $('[name = "Status"]').val($('[name = "button"]').val());

        })

        $(document).ready(function () {
            $('#finalSave').click(function () {
                var dataform = $('#myform').serialize();
                $.ajax({
                    type: 'POST',
                    url: '/Feedback/Add_Fulfillment_Reject',
                    data: dataform,
                    success: function () {
                        $('#exampleModal').modal('hide');
                    }

                })

            })
        })

    </script>
}

контроллер:


        #region fulfillment
        [HttpPost]
        public ActionResult Add_Fulfillment_Accept(int Request_ID, int? Status)
        {
            var user = db.TBL_Request.Find(Request_ID);

            user.Inserted_by = Status ?? 0;

            db.SaveChanges();
            return RedirectToAction("Index");
        }
//this is the one with the issue 
        [HttpPost]
        public ActionResult Add_Fulfillment_Reject(fulfillmentVM vM)
        {
            //save the status
            //save the note


            db.SaveChanges();
            return RedirectToAction("Index");
        }
        #endregion


    }

1 Ответ

1 голос
/ 08 января 2020

Ваш Javascript отправляет только текстовую область, которая находится в <form id="myForm">, в действие контроллера, которое ожидает объект fulfillmentVM. Измените ваши поля Html.Hidden на Html.HiddenFor. Это свяжет эти значения в записи.

Используйте TextAreaFor вместо текстовой области для привязки модели и убедитесь, что у вашей модели представления есть соответствующее свойство.

@Html.HiddenFor(m => m._Requests[i].Request_ID)
@Html.HiddenFor(m => m._Requests[i].Status, new { id = "myEdit", value = "" })
@Html.TextAreaFor(m => m.RejectMessage, htmlAttributes: new { @class = "form-control" })

Удалите <form id="myForm"> теги, они не нужны.

Сохраните кнопку как кнопку отправки, и она отправит сообщение в контроллер Add_Fulfillment_Reject, передав все связанные значения для вашего fulfillmentVM.

Куда поместить форму

Лично я бы поставил ее прямо перед текстовым полем, переместив туда и скрытые поля. Завершите это сразу после кнопки отправки.

@using (Html.BeginForm("Add_Fulfillment_Reject", "Feedback", FormMethod.Post))
{
    @Html.HiddenFor(m => m._Requests[i].Request_ID)
    @Html.HiddenFor(m => m._Requests[i].Status, new { id = "myEdit", value = "" })
    @Html.TextAreaFor(m => m.RejectMessage, htmlAttributes: new { @class = "form-control" })
    // rest of modal code
    <input type="submit" class="btn btn-success" id="finalSave" />
} // end form
...