JQuery Ajax Post未按预期工作
我正在构建一个MVC5web应用程序,它在布局模板中包含一个下拉列表。我在stackoverflow上遵循了这个答案,效果很好 我需要的是,用户从下拉列表中选择一个项(人名),进行JQuery调用,然后将所选下拉列表ID传递到控制器中的一个方法中 我有一个这样声明的下拉列表JQuery Ajax Post未按预期工作,jquery,asp.net-mvc,jquery-post,Jquery,Asp.net Mvc,Jquery Post,我正在构建一个MVC5web应用程序,它在布局模板中包含一个下拉列表。我在stackoverflow上遵循了这个答案,效果很好 我需要的是,用户从下拉列表中选择一个项(人名),进行JQuery调用,然后将所选下拉列表ID传递到控制器中的一个方法中 我有一个这样声明的下拉列表 @Html.DropDownListFor(x => x.SelectedUserID, Model.UserList, "Select", new { @class = "form-control" }) 当选择一
@Html.DropDownListFor(x => x.SelectedUserID, Model.UserList, "Select", new { @class = "form-control" })
当选择一个项目时,将调用以下JQuery代码
$(document).ready(function () {
$("#SelectedUserID").change(ChangeEventOfDDL);
function ChangeEventOfDDL() {
alert("test val" + $(this).val());
$.ajax({
type: "POST",
url: '/Dashboard/Index/' + $(this).val(),
data: { id: $(this).val() },
dataType: "json",
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
}
});
然后将所选ID传递给控制器中的Index方法
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return View(model);
}
这一切似乎都很好。当我调试代码时,我可以看到所选下拉列表ID按照预期通过代码传递到控制器中的Index方法。问题是,当我完成代码的单步执行并返回UI时,会出现JQuery错误,并提示“发生了错误”。这是我在JQuery函数中设置的默认错误消息
由于发生此错误,我的代码无法正常工作
我不知道为什么会发生这种情况,有人能帮忙吗
谢谢
更新
在ChangeEventOfDLL函数内部使用Ajax调用之前,我使用了以下代码,但是,它从来没有实际命中仪表板中的Index方法
$.post('@Url.Action("Dashboard", "Index")', { id: $(this).val() }, function (result) {
});
更新
我将JQuery更改为
$(document).ready(function () {
$("#SelectedUserID").change(ChangeEventOfDDL);
function ChangeEventOfDDL() {
alert("test val" + $(this).val());
$.post('@Url.Action("Index", "Dashboard")', { id: $(this).val() }, function (result) {
});
}
});
但是仍然没有在控制器中调用Index方法
接下来,我将JQuery代码更新为
$(document).ready(function () {
$("#SelectedUserID").change(ChangeEventOfDDL);
function ChangeEventOfDDL() {
alert("test val" + $(this).val());
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: $(this).val() },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
}
});
但是仍然没有在控制器中调用Index方法,我仍然会得到错误提示。当您从操作返回视图时,您正在传递
datatype:json
,另一个错误是您在data属性和url中也传递id,这也是错误的:
这应该是:
$.ajax({
type: "POST",
url: '/Dashboard/Index/' + $(this).val(),
data: { id: $(this).val() },
dataType: "json",
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
像这样:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
注意:始终使用Url。操作帮助您创建操作Url,以便它不会在实时部署中产生问题
如果要仅返回对象而不返回视图,请执行以下操作:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
然后必须在ajax调用中放入数据类型:'json'
更新:
使ddl事件如下所示:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
你的职能:
function ChangeEventOfDDL(id)
{
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
}
当您从操作返回视图时,您正在传递
datatype:json
,另一个错误是您在数据属性和url中也传递了id,这也是错误的:
这应该是:
$.ajax({
type: "POST",
url: '/Dashboard/Index/' + $(this).val(),
data: { id: $(this).val() },
dataType: "json",
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
像这样:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
注意:始终使用Url。操作帮助您创建操作Url,以便它不会在实时部署中产生问题
如果要仅返回对象而不返回视图,请执行以下操作:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
然后必须在ajax调用中放入数据类型:'json'
更新:
使ddl事件如下所示:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
你的职能:
function ChangeEventOfDDL(id)
{
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
}
当您从操作返回视图时,您正在传递
datatype:json
,另一个错误是您在数据属性和url中也传递了id,这也是错误的:
这应该是:
$.ajax({
type: "POST",
url: '/Dashboard/Index/' + $(this).val(),
data: { id: $(this).val() },
dataType: "json",
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
像这样:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
注意:始终使用Url。操作帮助您创建操作Url,以便它不会在实时部署中产生问题
如果要仅返回对象而不返回视图,请执行以下操作:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
然后必须在ajax调用中放入数据类型:'json'
更新:
使ddl事件如下所示:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
你的职能:
function ChangeEventOfDDL(id)
{
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
}
当您从操作返回视图时,您正在传递
datatype:json
,另一个错误是您在数据属性和url中也传递了id,这也是错误的:
这应该是:
$.ajax({
type: "POST",
url: '/Dashboard/Index/' + $(this).val(),
data: { id: $(this).val() },
dataType: "json",
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
像这样:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
注意:始终使用Url。操作帮助您创建操作Url,以便它不会在实时部署中产生问题
如果要仅返回对象而不返回视图,请执行以下操作:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
然后必须在ajax调用中放入数据类型:'json'
更新:
使ddl事件如下所示:
var id = $(this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
public ActionResult Index(int? id)
{
DashboardViewModel model = new DashboardViewModel();
if(id == null || id == 0)
{
User user = _userService.GetUserByID(Convert.ToInt32(User.Identity.GetUserId()));
model.SelectedUser = user;
}
else
{
model.SelectedUser = _userService.GetUserByID(id.Value);
}
return JsonResult(model,JsonRequestBehavior.AllowGet);
}
$("#SelectedUserID").change(function(){
ChangeEventOfDDL($(this).val());
});
你的职能:
function ChangeEventOfDDL(id)
{
$.ajax({
type: "POST",
url: '@Url.Action("Index","Dashboard")',
data: { id: id },
error: function () {
alert("An error occurred.");
},
success: function (data) {
}
});
}
它将进入error函数,因为您已将数据类型指定为JSON 因此,
dataType:'json'
但是您没有将json返回给您正在返回视图的函数,这就是抛出错误的原因。将操作结果更改为Json结果并执行此操作
public JsonResult(int? id)
{
// blah blah blah
return Json(model.SelectedUser, JsonRequestBehavior.AllowGet);
}
它将进入error函数,因为您已将数据类型指定为JSON 因此,
dataType:'json'
但是您没有将json返回给您正在返回视图的函数,这就是抛出错误的原因。将操作结果更改为Json结果并执行此操作
public JsonResult(int? id)
{
// blah blah blah
return Json(model.SelectedUser, JsonRequestBehavior.AllowGet);
}
它将进入error函数,因为您已将数据类型指定为JSON 因此,
dataType:'json'
但是您没有将json返回给您正在返回视图的函数,这就是抛出错误的原因。将操作结果更改为Json结果并执行此操作
public JsonResult(int? id)
{
// blah blah blah
return Json(model.SelectedUser, JsonRequestBehavior.AllowGet);
}
它将进入error函数,因为您已将数据类型指定为JSON 因此,
dataType:'json'
但是您没有将json返回给您正在返回视图的函数,这就是抛出错误的原因。将操作结果更改为Json结果并执行此操作
public JsonResult(int? id)
{
// blah blah blah
return Json(model.SelectedUser, JsonRequestBehavior.AllowGet);
}
然后从ajax设置中删除
数据类型:“json”
在您的操作中,使用返回部分视图(“视图名称”,模型)
而不是返回视图(“视图名称,模型)
如果返回部分视图,则返回视图()然后从ajax设置中删除
数据类型:“json”
在您的操作中,使用返回部分视图(“视图名称”,模型)
而不是返回视图(“视图名称,模型)
如果返回部分视图,则返回视图()然后从ajax设置中删除
数据类型:“json”
在你的行动中