按钮单击在本地有效,但不适用于生产环境

时间:2019-07-05 14:04:42

标签: c# asp.net-mvc

我已按照可能重复出现的问题中的步骤进行操作,但并没有解决我的错误。

除了一个按钮,我的整个应用程序在上传到服务器时都能正常工作。

该按钮是带有ID的简单按钮。当我单击它时,一个函数将捕获该单击,从用户输入字段中获取关联的数据,将其发送到控制器,然后将数据保存到数据库。

当我上载到服务器时,网站上的所有其他内容均运行正常。但是,在尝试找到控制器操作时,该按钮会引发404错误。

这里是按钮:

<input type="button" id="btnAdd" value="Add" class="btn btn-primary" />

调用控制器动作的脚本:

$(function () {
            $("#btnAdd").click(function () {
            //snipped for brevity

                //Send the records to server for saving to database.
                $.ajax({
                type: "POST",
                    url: "/Designees/InsertDesg",
                    data: '{FnameD: "' + txtFnameD.val() + '",LnameD: "' + txtLnameD.val() + '"}',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success:  function (r) {
                        $("#txtLandownerID").val(r.LandownerID);
                        $("#txtPermitNo").val(r.PermitNo);
                        $("#txtExpYear").val(r.ExpYear);
                    //Add the Name value to first cell.
                    SetValue(row, 2, txtFnameD);
                    SetValue(row, 3, txtLnameD);

                    //Add the row to the WebGrid.
                    webGrid.append(row);
                    window.location.href = r.Url;
                    }

                });



            });

控制器操作:

[HttpPost]
        public JsonResult InsertDesg(Designee designee)
        {
            designee.CreatedDate = System.DateTime.Now;
            designee.ModifiedDate = System.DateTime.Now;
            var user = context.Users.SingleOrDefault(u => u.BhCode == User.Identity.Name);
            designee.EnteredBy = user.Id;
            db.Designees.Add(designee);
            db.SaveChanges();
            var redirectUrl = new UrlHelper(Request.RequestContext).Action("Index", "Designees", new { id = designee.LandownerID, permit = designee.PermitNo, year = designee.ExpYear });
            return Json(new { Url = redirectUrl, designee });
        }

我的本​​地结果: enter image description here enter image description here

我的服务器结果: enter image description here

我希望服务器上发生的事情与本地系统上发生的事情相同。谁能想到解决方案?我的IIS日志只显示404错误,什么都没有显示。

解决方案

我不知道为什么要修复它,但是我将函数调用从上面更改为下面,现在可以正常工作:

 var RootUrl = '@Url.Content("~/")';

                //Send the records to server for saving to database.
                $.ajax({
                type: "POST",
                    url: RootUrl + "Designees/InsertDesg",

2 个答案:

答案 0 :(得分:1)

另一种解决方案是使用Url.Action()创建ajax url链接。

$(function () {
        $("#btnAdd").click(function () {
        //snipped for brevity

            //Send the records to server for saving to database.
            $.ajax({
            type: "POST",
                url: "@Url.Action("InsertDesg", "Designees")",
                data: '{FnameD: "' + txtFnameD.val() + '",LnameD: "' + txtLnameD.val() + '"}',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success:  function (r) {
                    $("#txtLandownerID").val(r.LandownerID);
                    $("#txtPermitNo").val(r.PermitNo);
                    $("#txtExpYear").val(r.ExpYear);
                //Add the Name value to first cell.
                SetValue(row, 2, txtFnameD);
                SetValue(row, 3, txtLnameD);

                //Add the row to the WebGrid.
                webGrid.append(row);
                window.location.href = r.Url;
            }

        });



    });

通过这种方式,您不必担心像您提供的解决方案那样分配RootUrl变量。

答案 1 :(得分:0)

您可以尝试将这段代码放入您的操作中,看看是否可行:

[HttpPost("Designees/InsertDesg", Order = 1)]
public JsonResult InsertDesg([FromBody]Designee designee)