【问题标题】:save a modal message in database issue在数据库问题中保存模式消息
【发布时间】:2020-01-07 20:12:23
【问题描述】:

我的主要想法是显示来自数据库的数据,在每一行旁边,有一个接受和拒绝按钮.onClick,按钮的值被传递给控制器​​并保存到数据库。到目前为止一切都很好,问题是什么时候我尝试添加一个弹出模式,其中包含输入文本以添加注释。只有当我单击拒绝按钮时它才会出现。我打开开发人员工具,发现它传递了数据行总数的两倍,我不知道如何传递我所在行的 id、被拒绝按钮的值以及最后的消息将被写入控制器。我试图在控制器的拒绝按钮方法中传递模式,但它传递为空。我究竟做错了什么?添加 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


    }

【问题讨论】:

  • 您能否编辑您的问题并删除不必要的代码?我们只需要查看与您的问题相关的代码。
  • @devlincarnate 我编辑它并将拒绝按钮代码放在视图中
  • 您的 onClick 事件调用了一个名为 reject(0) 的方法 - 没有一个名为 reject 的方法,它也是一个提交按钮(您在表单中)...您还下面有另一个提交按钮,它将根据您的表单定义执行后端代码,但您也有一个 AJAX 方法在下面根据名称执行它...为什么?
  • @ragerory onClick 是我的尝试之一,但没用,我删除了它。 ajax 用于将在模态中写入的文本传递给控制器​​,或者我将如何传递它?模态提交中的按钮,我的想法是将数据传递给控制器​​。你建议我编辑按钮或ajax ??或者我该怎么办?
  • @ragerory,当我从拒绝按钮中删除 type="submit " 并将其与 type=" button" .i 一起放置时,运行应用程序并 onClick,它显示弹出窗口并获取文本但是当我点击提交它关闭并且不去控制器。

标签: javascript c# ajax asp.net-mvc entity-framework-6


【解决方案1】:

您的 Javascript 仅将 &lt;form id="myForm"&gt; 中的文本区域提交给需要 fulfillmentVM 对象的控制器操作。将您的 Html.Hidden 字段更改为 Html.HiddenFor。这将在帖子上绑定这些值。

使用 TextAreaFor 而不是 textarea 进行模型绑定,并确保您的视图模型具有适当的属性。

@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" })

删除&lt;form id="myForm"&gt; 标签,它们是不必要的。

将按钮保留为提交按钮,它将发布到 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

【讨论】:

  • 我是否将我的模式保留在表单中并尝试您的答案?还是放在外面?
  • 我确实做到了,但提交按钮没有做任何事情。我在拒绝方法上放置了一个断点,我尝试点击,但它不会去那里。
  • 我错过了删除 &lt;form&gt;&lt;/form&gt; 标签的部分,这就是导致错误的原因。我删除它,一切正常。谢谢?
猜你喜欢
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 2011-05-27
相关资源
最近更新 更多