【发布时间】:2015-11-03 02:06:09
【问题描述】:
我最近向一个项目添加了 jquery 引用,现在没有触发来自视图的帖子。 Post ActionResult 保存了用户选择的设置,现在 Post 内部的断点没有被击中。 Visual Studio 中没有错误,但 Chrome 的控制台输出警告“主线程上的同步 XMLHttpRequest 已被弃用,因为它对最终用户的体验产生不利影响。有关更多帮助,请查看 http://xhr.spec.whatwg.org/。”和“为同步请求设置 'XMLHttpRequest.withCredentials' 已弃用。”
代码在 jquery 之前运行,那么问题是否与这些警告、jquery 的其他方面或其他方面有关?建议here、here 和here 为异步警告提供了可能的解决方案,但是,例如,将异步添加到布局中的新声明会再次触发帖子吗?在此先感谢大家。
观点:
@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>
最后是之前工作的Controller:
[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>
}
第二次编辑
保存按钮包含在原始视图中。
【问题讨论】:
-
ajax 调用在哪里??
-
可能不相关,但您有嵌套的表单标签(无效的 html 且不受支持)并且您有 2 个对
jquery-ui的引用(包括一个或另一个) -
显示的代码中没有任何内容会生成 ajax 调用
-
我删除了嵌套的表单标签和对 jquery-ui 的引用之一,但是控制器中 Post 内的断点仍然没有被命中。 “保存”按钮重新加载原始页面,生成同步 XMLHttpRequest 警告,并添加到 url “?_RequestVerificationToken=" 和似乎是由数字、字母和连字符组成的唯一标识符。
-
什么“保存”按钮?您的视图没有显示按钮,也没有显示您的 ajax 方法(您编辑的代码 sn-p 是 jquery 函数,与 ajax 无关)
标签: javascript jquery ajax asp.net-mvc multithreading