不推荐使用同步XMLHttpRequest来阻止HttpPost ActionResult

时间:2015-08-11 01:26:13

标签: javascript jquery ajax asp.net-mvc multithreading

我最近添加了对项目的jquery引用,现在View中的Post没有触发。 Post ActionResult保存了用户选择的设置,现在Post中的断点没有被击中。 Visual Studio中没有错误,但Chrome的控制台会输出警告“主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。有关更多帮助,请查看http://xhr.spec.whatwg.org/。”并且不推荐使用“为同步请求设置'XMLHttpRequest.withCredentials'。”

代码在jquery之前运行,那么问题与那些警告,jquery的其他方面或者其他可能的东西有关吗?建议hereherehere为异步警告提供了可能的解决方案,但是,如果将布局中的新声明添加为异步会再次触发Post?在此先感谢所有人。

观点:

@using Project.Data
@model Project.Models.PreferencesModel
@{
ViewBag.Title = "Preferences";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="page_bar clearfix">
<div class="row">
    <div class="col-md-8">
        <h1 class="page_title">
            <i class="fa fa-gears"></i> Preferences
        </h1>
    </div>
</div>

<div class="page_content">
<div class="container-fluid">
    <form data-parsley-validate>
        @using (Html.BeginForm("Preferences", "Manage", FormMethod.Post, new { id = "PreferencesForm", autocomplete = "on", data_parsley_validate = "data-parsley-validate" }))
        {
            @Html.AntiForgeryToken()
            @Html.HiddenFor(m => m.PreferenceID)
            @Html.HiddenFor(m => m.PreferenceCreatedBy)
            @Html.HiddenFor(m => m.PreferenceCreatedDate)
        <div class="row">
            <div class="col-lg-12">
                <div class="panel panel-default">
                    <div class="panel-body">
                        <div class="col-md-4">

                                @Html.LabelFor(m => m.PricingPreferenceTypeID, "Pricing Preference Type")
                                @Html.DropDownListFor(m => m.PricingPreferenceTypeID, StaticCache.GetPricingPreferenceTypes(), new { @class = "form-control", data_parsley_required = "true" })
                                @Html.ValidationMessageFor(m => m.PricingPreferenceTypeID)

                        </div>
                        <div class="col-md-4">

                                @Html.LabelFor(m => m.PricingStrategyID, "Pricing Strategy")
                                @Html.DropDownListFor(m => m.PricingStrategyID, StaticCache.GetPricingStrategies(), new { @class = "form-control", data_parsley_required = "true" })
                                @Html.ValidationMessageFor(m => m.PricingStrategyID)

                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-lg-12  text-right">
                <button type="submit" class="btn btn-success btn-large">Save</button>
            </div>
        </div>
 }
 </form>
 </div>
</div>

布局包含以下新声明:

<script src="~/Scripts/jquery-2.1.3.js"></script>
<script src="/Scripts/jquery-ui-1.11.4.js"></script>

最后,以前工作的控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Preferences(PreferencesModel model)
{
    ProjectEntities projectDb = new ProjectEntities();

    projectDb.uspAddPreference(DateTime.Now, model.PricingStrategyID, null, null, model.PricingPreferenceTypeID);

    return RedirectToAction("Preferences");
}

修改 这段jquery被添加到View的底部以使一个下拉列表依赖于另一个,但是HttpPost ActionResult内部的断点仍未被击中。可能导致这种情况的原因是什么?

@section Scripts{
<script>
    $(function () {
        var $dropdownInput = $("#PricingStrategyID");
        $("#PricingPreferenceTypeID").change(function () {
            if (this.value != 1) {
                $dropdownInput.hide();
            } else {
                $dropdownInput.show();
            }
        }).change();
    });
</script>
}

第二次编辑

原始视图中包含的保存按钮。

1 个答案:

答案 0 :(得分:0)

这个问题的答案似乎是一个无法检测的嵌套表格标签。一旦删除,邮政工作正常。