Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery Ajax Post未按预期工作_Jquery_Asp.net Mvc_Jquery Post - Fatal编程技术网

JQuery Ajax Post未按预期工作

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" }) 当选择一

我正在构建一个MVC5web应用程序,它在布局模板中包含一个下拉列表。我在stackoverflow上遵循了这个答案,效果很好

我需要的是,用户从下拉列表中选择一个项(人名),进行JQuery调用,然后将所选下拉列表ID传递到控制器中的一个方法中

我有一个这样声明的下拉列表

@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”

在你的行动中