MVC5未将JSON属性名称传递给视图

MVC5未将JSON属性名称传递给视图,json,ajax,asp.net-mvc,Json,Ajax,Asp.net Mvc,我刚开始使用MVC、JSON、AJAX等,作为一个附带项目,我一直在尝试创建一个数据viz仪表板 今天,我按照以下指南介绍了如何将一个简单的数据表作为JSON从SQL传递到我的视图: 它主要起作用:JsonResult来自我的控制器,包含值,但不包含属性名。 这导致了一个问题,因为我在处理JavaScript中显示的数据时引用了属性名 以下是SQL数据: 这是我的模型: public partial class vw_Dash_ChartData : IEnumerable<ob

我刚开始使用MVC、JSON、AJAX等,作为一个附带项目,我一直在尝试创建一个数据viz仪表板

今天,我按照以下指南介绍了如何将一个简单的数据表作为JSON从SQL传递到我的视图:

它主要起作用:JsonResult来自我的控制器,包含值,但不包含属性名。 这导致了一个问题,因为我在处理JavaScript中显示的数据时引用了属性名

以下是SQL数据:

这是我的模型:

    public partial class vw_Dash_ChartData : IEnumerable<object>
        {
            [Key]
            [JsonProperty(PropertyName = "Classification")]
            public string Classification { get; set; }

            [JsonProperty(PropertyName = "Count")]
            public int Count { get; set; }

            public IEnumerator<object> GetEnumerator()
            {
                yield return Classification;
                yield return Count;
            }

            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
            {
                return this.GetEnumerator();
            }
        }
(起初,我直接从我的
DbContext
发送数据,但后来我想使用我的
vw\u Dash\u ChartData
模型可能会有所帮助。这没有什么区别)

我的观点如下:

    @{
        ViewBag.Title = "Charts";
        AjaxOptions options = new AjaxOptions
        {
            //Confirm = "Are you sure?",
            LoadingElementId = "divLoading",
            OnSuccess = "processDataMethod",
            Url = Url.Action("ChartDataJson")
        };
    }

    <script type="text/javascript">
        function processDataMethod(data) {
            var output = $("#dataZone");
            output.empty();
            for (var i = 0; i < data.length; i++) {
                var chartData = data[i];
                output.append("<tr><td>" + chartData.Classification + "</td><td>" + chartData.Count + "</td></tr>");
            }
        }
    </script>

    <div>
        <table>
            <thead>
                <tr>
                    <th>Classification</th>
                    <th>Count</th>
                </tr>
            </thead>
            <tbody id="dataZone">
            </tbody>
        </table>
    </div>

    @using (Ajax.BeginForm(options))
    {
        <div id="divLoading" style="color: red; font-size: larger;">
             Loading...
        </div>
        <div>
            <button type="submit" id="btnClicky" >Clicky</button>
        </div>
    }

    <script>
        $("#btnClicky").trigger("click");
    </script>
@{
ViewBag.Title=“图表”;
AjaxOptions=新的AjaxOptions
{
//确认=“你确定吗?”,
LoadingElementId=“divLoading”,
OnSuccess=“processDataMethod”,
Url=Url.Action(“ChartDataJson”)
};
}
函数processDataMethod(数据){
var输出=$(“#数据区”);
output.empty();
对于(变量i=0;i
当我加载页面时,我得到的是:

这是浏览器开发工具中显示的JSON对象

收到任何提示/想法,谨致谢意!另外,如果我做了什么蠢事,一定要告诉我,因为我想学习这方面的最佳实践。

怎么样

var jsonData = Json(data.Select(x=> new { 
    Classification = x.Classification,
    Count = x.Count
    })
);

return jsonData;

对真管用!但问题是:我是否仍然应该在jsonData声明的末尾追加
jsonRequestBehavior.AllowGet
?这有什么区别?这主要是为了安全。请检查这里:是的,尽管有人投了反对票,所以我在等着看他们是否给出了原因。
var jsonData = Json(data.Select(x=> new { 
    Classification = x.Classification,
    Count = x.Count
    })
);

return jsonData;