Jquery 值不是从razor ajax到action方法的

Jquery 值不是从razor ajax到action方法的,jquery,ajax,asp.net-mvc,razor,Jquery,Ajax,Asp.net Mvc,Razor,action方法中的Id始终为null。迷失在我做错了什么的地方。按预期调用操作方法 jQuery函数: function success(result) { var Id = $('#UserId').val(); var data = JSON.stringify({ 'Id': Id }); alert(data); $.ajax({ type: "GET", url: "@Url.Action("ListAppointmen

action方法中的Id始终为null。迷失在我做错了什么的地方。按预期调用操作方法

jQuery函数:

function success(result) {
    var Id = $('#UserId').val();
    var data = JSON.stringify({ 'Id': Id });
    alert(data);
    $.ajax({
        type: "GET",
        url: "@Url.Action("ListAppointments", "Appointment")",
        data: data,

        success: function (result2) {
            $("#partialViewAppointments").html(result2);
            $('#example').DataTable();

        }
    });
}
行动方法:

public PartialViewResult ListAppointments(string Id)
{
    var userId = Convert.ToInt32(Id);
    var o = (from s in db.tblAppointments.ToList()
             where s.UserId == userId
             select new AppointmentViewModel { AppointmentInstructorName = s.InstructorName, AppointmentLessonAddress = s.Address, LessonDateTime = s.LessonDate, UserId = s.UserId, Id = s.ID });

    return PartialView(o);
}

通过这样做,我使它工作。不确定为什么stringify函数会阻止它工作:

  function success(result) {
        var Id = $('#UserId').val();
        var data = ({ Id: Id });
        alert(data);
        $.ajax({
            type: "GET",
            url: "@Url.Action("ListAppointments", "Appointment")",
            data: data,
            success: function (result2) {
                $("#partialViewAppointments").html(result2);
                $('#example').DataTable();

            }
        });
    }

您缺少的
内容类型:'application/json'
,但是假设您已经离开了默认路由,您可以使用查询参数传递它

function success(result) {
    var Id = $('#UserId').val();
    alert(data);
    $.ajax({
        type: "GET",
        url: "@Url.Action("ListAppointments", "Appointment")" + "?id=" + Id,
        data: data,
        success: function (result2) {
            $("#partialViewAppointments").html(result2);
            $('#example').DataTable();

        }
    });
}

您不需要对数据执行
JSON stringify
。可以按原样发送js对象

var d ={ Id:  $('#UserId').val()};
$.ajax({
            type: "GET",
            url: "@Url.Action("ListAppointments", "Home")",
            data: d
            success: function (result2) {
              $("#partialViewAppointments").html(result2);
              $('#example').DataTable();
            }
   });
现在,由于这是一个GET请求,数据(js对象)将作为查询字符串值发送到服务器(例如:
ListAppointments?Id=23

因此,当您对该js对象执行
JSON.stringify
调用时,它将返回一个字符串,如
“{”Id:23}”
。因此,用于ajax调用(带有querystring)的最终url将是
ListAppointments?{“Id”:23}
。您可以看到这是无效的。它应该是
ListAppointments?Id=23

如果仍要使用
JSON.stringify
(发送复杂数据),请指定
contentType
并使用
POST
方法

另外,我看到您正在将字符串param值转换为action方法中的int,为什么不使用
int
作为参数类型,因为您正在发送数字数据

public PartialViewResult ListAppointments(int Id)
{

}

为什么它不能与stringify一起工作,因为我发现了这一点?我正在更新答案,将该信息包含在1 mntthankyou中。这是有道理的。我已把它标记为答案。