【问题标题】:MVC4 Ajax request code 404MVC4 Ajax 请求代码 404
【发布时间】:2014-04-04 18:31:29
【问题描述】:

每当我在浏览器中检查控制台时,它都会说找不到代码为 404 的 URL。它执行帖子的 URL 是 http://localhost:54473/Date/GetArticleName

DateController.cs里面的方法

public JsonResult GetArticleName(long barcode)
{
    ArticleDbContext artdb = new ArticleDbContext();
    Article art = (Article) artdb.Articles.Where(a => a.Barcode == barcode).First();
    return Json(art.Name, JsonRequestBehavior.AllowGet);
}

创建.schtml

@model DatoCheckerMvc.Models.Date

@{
    ViewBag.Title = "Opret ny";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Opret</h2>

@using (Html.BeginForm("Create", "Date", FormMethod.Post, new { }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)


    <script type="text/javascript">
        function validationFunction() {
            var isValid = true;
            if (!$("#ArticleBarcode").val() || $("#ArticleBarcode").val() == "" || $("#ArticleBarcode").val().match("^\d+$")) {
                isValid = false;
            }
            if (!$("#RunDate").val() || $("#RunDate").val() == "" || $("#RunDate").val().match("((?:(?:[0-2]?\\d{1})|(?:[3][01]{1}))[-:\\/.](?:[0]?[1-9]|[1][012])[-:\\/.](?:(?:[1]{1}\\d{1}\\d{1}\\d{1})|(?:[2]{1}\\d{3})))(?![\\d])")) {
                isValid = false;
            }

            if (isValid) {
                return true;
            }
            else {
                return false;
            }
        }

        $(document).ready(function () {
            $(window).keydown(function (event) {
                if ((event.keyCode == 13) && (validationFunction() == false)) {
                    event.preventDefault();
                    return false;
                }
            });

            $("#ArticleBarcode").change(function (event) {
                $.ajax({ //This function is the call to the method.
                    url: '@Url.Action("GetArticleName", "Date")',
                    data: { barcode: $("#ArticleBarcode").val() },
                    type: 'POST',
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    success: function (result) {
                        var divInsert = document.getElementById("JsonResponse");
                        divInsert.innerHTML = result;
                    },

                    error: function () {

                        alert("error");
                    }
                });
            });
        });
    </script>

    <fieldset>
        <legend>Dato</legend>
        <div class="row">
            <div class="form-group col-md-4">
                <div class="editor-label">
                    @Html.LabelFor(model => model.ArticleBarcode)
                </div>
                <div class="editor-field">
                    @Html.TextBoxFor(model => model.ArticleBarcode, null, new { @class = "form-control" })
                    @Html.ValidationMessageFor(model => model.ArticleBarcode)
                </div>
            </div>
        </div>

        <div class="row">
            <div class="form-group col-md-4">
                <div class="editor-label">
                    <label for="ArticleName">Varenavn</label>
                </div>
                <div class="editor-field">
                    <div id="ArticleName">

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

        <div class="row">
            <div class="form-group col-md-4">
                <div class="editor-label">
                    @Html.LabelFor(model => model.RunDate)
                </div>
                <div class="editor-field">
                    @Html.TextBoxFor(model => model.RunDate, null, new { @class = "form-control" })
                    @Html.ValidationMessageFor(model => model.RunDate)
                </div>
            </div>
        </div>
        <p>
            <input class="btn btn-default" type="submit" value="Opret" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Tilbage", "Index")
</div>


@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

我有:

  • 确保 JQuery 加载在顶部
  • 尝试改用$.getJson()
  • 在方法中插入断点以查看它是否执行(它没有执行)

我该如何解决我的问题?

【问题讨论】:

    标签: jquery ajax asp.net-mvc-4 json.net


    【解决方案1】:

    尝试使用HttpPost 属性标记您的方法:

    [HttpPost]
    public JsonResult GetArticleName(long barcode) {
        ...
    }
    

    如果没有该属性,则假定为GET 请求。

    另外,如果是 POST 请求,则不需要 JsonRequestBehavior.AllowGet

    【讨论】:

    • 这并没有解决问题,但我发现它在 JQuery 的这一行上抛出错误:xhr.send( ( s.hasContent &amp;&amp; s.data ) || null ); (jquery-1.9.0.js line 8475)
    • 这不是 jQuery 错误。您正在向不存在的资源发出 POST 请求。添加属性后是否重新编译?
    • 不,我没有,但现在我重新编译(没有编辑任何内容)它只是返回错误代码 500。
    • 我想添加 HttpPost 可以解决问题,现在您的 500 错误发生在该方法内部的某处。检查您的错误日志以查看引发异常的位置。
    猜你喜欢
    • 2016-05-18
    • 2016-07-19
    • 1970-01-01
    • 2022-01-19
    • 2015-07-31
    • 1970-01-01
    • 2016-02-21
    • 2013-02-15
    • 2010-11-05
    相关资源
    最近更新 更多