首页 > 解决方案 > ActionResult 上的 Httpost 方法无法存储数据

问题描述

我有ActionResult使用的方法Httpost,但是当我调试时它没有进入方法,只在 ActionResult 中结束使用HttpGet。这可能是什么主要原因?我想将值存储回数据库列,此时它不这样做并且在浏览器上进行调试以及检查任何内容。

//GET/Courses-List
[HttpGet]
public ActionResult CoursesRegistration()
{
    eNtsaCourses courses = new eNtsaCourses();
    //courses.Course = Course;
    return View();
}


[Route("Home/CoursesRegistration")]
[HttpPost]
public ActionResult CoursesRegistration([Bind(Include = "Id,Course,Nickname,Term, EnrolledAs, Published")] eNtsaCourses courses)
{
    if(ModelState.IsValid)
    {
        try
        {
            cb.eNtsaCourse.Add(courses);
            cb.SaveChanges();
            return Json(new { success = true });
        }
        catch(Exception ex)
        {
            ModelState.AddModelError("", ex.Message);
        }
    }
        
    return PartialView("CoursesRegistration", courses);
}

@using(Html.BeginForm("CoursesRegistration", "Home", FormMethod.Post, new { id="testForm", @class="form-horizontal"})) { 
                            <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">Start New Course</h5>
                                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                                <span aria-hidden="true">&times;</span>
                                            </button>
                                        </div>
                                        <div class="form-group row">
                                            <label for="CourseName" class="col-sm-3 col-form-label">CourseName</label>
                                            <div class="col-sm-5">
                                                @Html.EditorFor(model => model.CourseName, new { htmlAttributes = new { @class = "form-control", autofocus = "autofocus", placeholder = "CourseName" } })

                                            </div>
                                        </div>
                                        <div class="form-group row">
                                            <label for="Content-Licence" class="col-sm-3 col-form-label">Content Licence</label>
                                            <div class="col-sm-5">
                                            
                                            </div>
                                        </div>
                                       
                                        <div class="modal-footer">
                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
                                            <a href="@Url.Action("CoursesRegistration", "Home")" class="btn btn-large btn-success" onclick="$('#exampleModal').modal('show');">Create Courses</a>
                                            <script type="text/javascript">
                                                $("#exampleModal.btn-success").click(function () {
                                                    saveData();
                                                });

                                                function saveData() {
                                                    $.ajax({
                                                        url: "/Home/CoursesRegistration",
                                                        data: $('#testForm').serialize(),
                                                        type: 'post',
                                                        success: function (data) {
                                                            if (data.Success) {
                                                                $("#exampleModal").modal('hide');
                                                            } else {

                                                            }

                                                        },
                                                        error: function (xhr, status) {

                                                        }
                                                       
                                                    });
                                                    return false;
                                                }


                                            </script>

                                        </div>
                                        
                                    </div>
}

标签: c#jquerysql-serverasp.net-mvcbootstrap-4

解决方案


好的几件事,为什么在剃须刀中使用 aHtml.BeginForm然后用 ajax/js 覆盖它?

最好的选择是选择一种方法并使用它,我的偏好是将整个模式粘贴到部分中并使用 C# 对象作为该部分的模型,然后您可以使用 beginform 而不必乱用 ajax/js和序列化。

然后,您可以在控制器 POST 函数中输入模型的单个输入。

您是否检查过按钮是否真的在触发 js?我注意到你把它连接到

$("#exampleModal.btn-success").click(function () {
    saveData();
});

什么时候应该

$("#exampleModal .btn-success").click(function () {
    saveData();
});

也许粘贴一些控制台登录以检查它是否触发以及发送之前的数据是什么。

还将控制器函数更改为 httpget 以查看它是否找到路由正常,然后更改回 post 并且您应该知道它是控制器、路由还是前端代码。我怀疑前端代码。


推荐阅读