当从控制器发送到索引时,列表总是返回空值

Posted

技术标签:

【中文标题】当从控制器发送到索引时,列表总是返回空值【英文标题】:List always returns null value when sent from controller to index 【发布时间】:2021-10-20 06:58:21 【问题描述】:

我现在已经尝试了 20 种不同的方法,并在 Google 上搜索了这个问题,但我仍然卡住了。我的列表总是返回一个空值。当我调试时,我可以看到值来自数据库,一切似乎都很好。

但是,当我在视图中使用console.log 调试时,它总是为空。

这是我的模型

public class GarageModel

    public int GarageId  get; set; 
    public int Values  get; set; 

C#方法

public List <GarageModel> getRequestType(int garageId)

    List<GarageModel> newList = new List<GarageModel>();

    string sql = "SELECT GarageID, RequestProperty FROM GarageCrossRequestType 
                  WHERE GarageID = " + garageId;

    var cmd = new SqlCommand(sql, Connection);

    var dt = new DataTable();
    dt.Load(cmd.ExecuteReader());

    foreach (DataRow i in dt.Rows)
    
        var model = new GarageModel();
        model.GarageId = Convert.ToInt32(i["GarageID"].ToString());
        model.Values = Convert.ToInt32(i["RequestProperty"].ToString());
        newList.Add(model);
    

    return newList;
    // returns the values from database 

Javascript / jQuery

 function editGarage(e) 
            e.preventDefault();
            var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
            var garageId = dataItem.GarageId;
            countryId = dataItem.CountryId;
            name = dataItem.Name;
            customerNumberOfEditingGarage = dataItem.CustomerNumber;
            var Values = dataItem.Values;

            $.ajax(
                   type: 'POST',
                   url: '@Url.Action("getRequestType", "Garage")?garageId=' + garageId,
                   dataType: 'JSON',
                   data: 
                       Values: Values, garageId: garageId
                   ,
            );
            console.log(garageId, Values);
            // always return correct garageId but null in Values
            // or whatever value is set to Values in the model

我错过了什么?

就像我说过的那样,我尝试了不同的方法,我在 get/post 之间更改了类型,我已经将方法更改为 bool、int 等,但老实说,我迷路了,不是特别擅长javascript/jQuery 也可以,因此我将不胜感激。

要指定,我想要的结果只是查看当我使用console.log 在浏览器中调试时从方法/数据库中获得的值。

【问题讨论】:

可能与您当前的问题无关,但可能对***.com/questions/14376473/… 感兴趣。 “可能”是指“您需要立即阅读”。 您的问题是您的 console.log(..) 在 ajax 之外,因此无论您是否运行 ajax 都会运行 - 您的 ajax 请求没有 success: (或其他回调)所以您的代码原样无法接收响应 - 因此尝试不同的获取/发布是无关紧要的,因为当/如果它确实工作时你会忽略结果。 这能回答你的问题吗? How to return the response from an asynchronous call @freedomn-m 非常感谢! @mjwills 你没看错! 【参考方案1】:

您的getRequestType 方法只需要一个参数,values 不是参数,所以只发送garageId 并且您需要在您的ajax 成功时填写values

$.ajax(
    type: 'POST',
    url: '@Url.Action("getRequestType", "Garage")',
    dataType: 'JSON',
    data: 
        garageId: garageId
    ,
    success: function(data)
        values = data;
        console.log(garageId, data);
    
);

并且控制器方法需要返回 JsonResult 而不是列表

public JsonResult /*List<GarageModel>*/ getRequestType ...


return Json(newList, JsonRequestBehavior.AllowGet);

【讨论】:

以上是关于当从控制器发送到索引时,列表总是返回空值的主要内容,如果未能解决你的问题,请参考以下文章

@ModelAttribute 使用 thymeleaf 返回空值

将 JSON 从视图发送到控制器 ASP.NET MVC 会给出空值

全局变量在不同视图控制器中使用时返回空值

剑道网格发布和删除将空值发送到控制器

数据从 AJAX 调用传递到控制器但获取空值

从 iOS 应用程序调用时,Firebase 函数返回空值