繁体   English   中英

如何在部分视图(ASP.NET MVC)中使用DevExtreme?

[英]How to use DevExtreme in partial view (ASP.NET MVC)?

我尝试在局部视图中使用DevExtreme组件。 但是,当我单击该元素时,将显示我的局部视图页面。

在单击后的主页上我有错误

Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'ApplicationEntity' with type 'System.Data.Entity.DynamicProxies.ApplicationEntity_50A6A66F1464C1DE4E8A736E85D88C5AF4F4249EAE26FB21C4F82592E001885D'. Path 'data[0].ApplicationEntity.ApplicationEntityHistories[0]'.

浏览器控制台屏幕

主页代码:

<div class="row">
<div class="col-md-7">
   <button id="btn">CLICK</button 

</div>
<div class="col-md-5" id="divPartialViewContainer">

</div>
</div>
<script>
$(document).ready(function () {

    $("#btn").on("click", function () {
        var text = $(this).text().trim();
        if (text.length > 0) {
            console.log(text);
            $.ajax({
                url: '/RiskMap/RiskDetailsPartial/',
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify({ 'param': text }),
                success: function (content) {
                    $('#divPartialViewContainer').html(content);
                },
                error: function (e)
                {
                    console.log(e);
                }
            });
        }
       });

     });
 </script>

控制器代码

[HttpPost]
public async Task<ActionResult> RiskDetailsPartial(string param)
{          
  return PartialView("_RiskDetails", new List<Risk>());
}

部分查看代码:

@model IEnumerable<Core.Models.Risk>
@using Core.Models
@using Core.ComplexTypes
@{
   ViewBag.Title = "Risks";
}

<h2>Risks</h2>

@(Html.DevExtreme().DataGrid<Risk>()
    .DataSource(Model)
    .Columns(columns =>
    {
        columns.AddFor(m => m.Id);
        columns.AddFor(m => m.Impact);
        columns.AddFor(m => m.Probability);

    })
  )

该消息很清楚,您只需要更彻底地阅读即可。

Newtonsoft.Json.JsonSerializationException:为类型为“ System.Data.Entity.DynamicProxies.ApplicationEntity_50A6A66F1464C1DE4E8A736E85D88C5AF4F4249EAE26FB21C4F82592E001885D”的属性“ ApplicationEntity”检测到自引用循环。 路径“数据[0] .ApplicationEntity.ApplicationEntityHistories [0]”。

Json序列化程序正在尝试序列化传递给它的某种实体(称为EntityA ),但是问题在于该实体包含另一个实体(称为EntityB ),该实体包含第一个实体( EntityA )。 这圈转!

我自己的ORM也发生了这种情况,我发现问题是延迟加载。 我通过向每个实体添加接口来解决该问题:

interface IJSonify
{
   object Json();
}

在这里,我只是返回一个匿名对象。 实现此接口的实体决定如何将其表示为JSON对象。

我有同样的问题,我通过在webApplication init上声明JsonConvert defaultSettings解决了它。

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
        Formatting = Newtonsoft.Json.Formatting.Indented,
        ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};

显然,DevExtreme不在DataSourceLoader.Load(..)方法中使用标准的ASP.NET MVC json序列化程序,因此,如果您设置ASP.NET MVC json序列化程序ReferenceLoopHandling设置,则不够。

另一种解决方案是在属性上方使用[JsonIgnore] dataAnnotation来生成循环引用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM