ASP.NET MVC 向 JS 发送类对象的问题 - JS 数组中的空对象

Posted

技术标签:

【中文标题】ASP.NET MVC 向 JS 发送类对象的问题 - JS 数组中的空对象【英文标题】:ASP.NET MVC Problem sending class objects to JS - empty objects in JS array 【发布时间】:2021-10-14 19:55:15 【问题描述】:

我们有一个带有控制器的 ASP:NET MVC 应用程序。我们 HTTP GET 到控制器中的一种方法。 在其中,我们要创建 Event 对象并将列表及其所有属性发送回客户端(在 JS 中)。

它不起作用,因为在 JS 中我们会收到一个空对象列表。请参阅随附的屏幕截图。我们缺少什么?

提前感谢您的帮助。

ASP.NET MVC 控制器:

public class KalenderController : Controller

    public class Event
    
        public Event(int _id, string _title)
        
            id = _id;
            title = _title;
        

        public int id;
        public string title;
    

    [HttpGet]
    public JsonResult GetEvents()
    
        StringValues start = "";
        Request.Query.TryGetValue("start", out start);
        StringValues end = "";
        Request.Query.TryGetValue("end", out end);

        DateTime dtStart = DateTime.Parse(start.ToString().Replace(" ", "+"));
        DateTime dtEnd = DateTime.Parse(end.ToString().Replace(" ", "+"));

        List<Event> events = new List<Event>();

        DateTime dt = dtStart;
        while(dt <= dtEnd)
        
            events.Add(new Event(1, "title"));

            dt = dt.AddDays(1);
        

        return Json(events);
    

JS代码:

$.ajax(
    url: "Kalender/GetEvents?start=" + fetchInfo.startStr + "&end=" + fetchInfo.endStr,
    type: 'GET',
    success: function (data) 
        console.dir(data);
        console.log(data.d);
    ,
    error: function (jqXHR, textStatus, errorThrown) 
        alert("Fehler beim Abrufen des Skripts: " + textStatus + " - " + errorThrown);
    ,
    failure: function (bool) 
        alert("Fehler beim Abrufen des Skripts");
    
);

向客户端发送数据的结果: JS数组中的空对象:https://i.stack.imgur.com/Zi7v7.png

【问题讨论】:

在 Parse() 语句之后在控制器中设置断点。 dtStart 是正确的值还是 0(默认值,因为它是一个结构)?如果您知道日期字符串的格式,我更喜欢 ParseExact (docs.microsoft.com/en-us/dotnet/api/…)。顺便提一句。您可以使用 [FromQuery] 作为 GetEvents 的参数来获取您的查询参数。 日期时间已经正确,但感谢您提出 [FromQuery] 属性! 【参考方案1】:

您应该将公共字段更改为 Event 对象的公共属性

public class Event

    public Event(int _id, string _title)
    
        Id = _id;
        Title = _title;
    

    public int Id  get; set; 
    public string Title  get; set; 

【讨论】:

以上是关于ASP.NET MVC 向 JS 发送类对象的问题 - JS 数组中的空对象的主要内容,如果未能解决你的问题,请参考以下文章

从 Sencha Touch 发送 JSON 数据到 ASP.NET MVC

ASP.NET MVC 表单不向控制器发送数据

Asp.net MVC 4 / 5 中的分页

如何在 ASP.NET MVC 中向客户端发送 XML 文件

如何将类的对象发送到数据库以存储在 ASP.NET MVC5 中?

ASP.NET MVC Controller接收ajax post方式发送过来的json对象或数组数据