2016-08-04 63 views
0

的對象時檢測到循環引用我的mvc應用程序正在使用引導表。實體到json錯誤MVC - 在序列化類型

我的模型是使用實體框架

@ModelType IEnumerable(Of SupportDiary.tSSTCode) 

我已經使用其他表和他們所有的工作同樣的方法(生成表格),但這種觀點返回一個錯誤,訪問我的數據庫表tSSTCodes:

A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.tSSTCode_8DE9547CF85FA0D8C54E713F4E2A7A2104EC7CB828A4B0F29604CE8AE871F8A3'. 

在其它打破是線....

var tdata = @Html.Raw(Json.Encode(Model)); 

型號是一個簡單的表格。這是創建它的sql;

CREATE TABLE [dbo].[tSSTCodes](
    [sstID] [int] IDENTITY(1,1) NOT NULL, 
    [sRU] [nvarchar](10) NOT NULL, 
    [sProjectCode] [nvarchar](10) NOT NULL, 
    [sProjectName] [nvarchar](50) NOT NULL, 
    [sTaskNo] [nvarchar](10) NOT NULL, 
    [sTaskName] [nvarchar](50) NOT NULL, 
    [sRedundant] [bit] NOT NULL CONSTRAINT [DF_tSSTCodes_sRedundant] DEFAULT ((0)), 
CONSTRAINT [PK_tSSTCodes] PRIMARY KEY CLUSTERED 
(
    [sstID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

我舉表的代碼是

<table id="table" 
    data-classes="table table-hover table-condensed" 
    data-striped="true" 
    data-toolbar="#toolbar" 
    data-pagination="true" 
    data-click-to-select="true" 
    data-search="true" 
    data-show-export="true" 
    data-show-pagination-switch="true" 
    data-show-toggle="true" 
    data-show-columns="true" > 
    <thead> 
     <tr> 
      <th data-field="sstID" data-formatter="btnViewFormatter">ID</th> 
      <th data-field="sRU" >R/U</th> 
      <th data-field="sProjectCode" >Project Code</th> 
      <th data-field="sProjectName" >Project Name</th> 
      <th data-field="sTaskNo" >Task No</th> 
      <th data-field="sTaskName" >Task Name</th> 
      <th data-field="sRedundant" data-formatter="trueFalseFormatter" >Redundant</th> 
     </tr> 
    </thead> 
</table> 

和相關的腳本是:

<script type="text/javascript"> 

var tdata = @Html.Raw(Json.Encode(Model)); 

console.log(tdata); 

var $table = $('#table'); 

function btnViewFormatter(value) { 
    return '<a class="btn btn-default btn-sm" href="@Url.Content("~/SSTCodes/Edit?id=")' + value + '" >' + value + '</a>'; 
} 

function trueFalseFormatter(value) { 
    if (value == true){ 
     return '<span class="glyphicon glyphicon-check"></span>'; 
    } else { 
     return '<span class="glyphicon glyphicon-unchecked"></span>'; 
    } 
} 

function getSelectedRow() { 
    var index = $table.find('tr.success').data('index'); 
    return $table.bootstrapTable('getData')[index]; 
} 

$(function() { 

    $table.bootstrapTable({ 
     data: tdata, 
     fixedColumns: true, 
     fixedNumber: 1, 
     exportDataType:"all", 
     exportTypes:['csv', 'txt', 'excel'] 
    }); 

    $table.on('click-row.bs.table', function (e, row, $element) { 
     $('.success').removeClass('success'); 
     $($element).addClass('success'); 
    }); 

    $table.on('dbl-click-row.bs.table', function (e, row, $element) { 
     var url = '@Url.Content("~/SSTCodes/Edit?id=")' + getSelectedRow().sstID; 
     window.navigate(url); 
    }) 

}); 

我想不出是什麼原因造成循環引用...在試圖調試我試圖console.log(tdata);放在違規線後,但當然它不g等遠...所以我試着console.log(@Html.Raw(Json.Encode(Model)));並在console.log行得到相同的錯誤。

UPDATE 鏈接到一個可能的重複的另一個問題是沒有幫助的。我的代碼基於使用ADO Entity Frameworks嚮導模板生成新的MVC控制器。這搭起了一系列的CRUD觀點。我所做的只是用bootstrap table helper替換每個項目代碼的html表a。我已經用幾個控制器完成了它們,它們都工作。

任何幫助表示讚賞。

+0

可能的重複[循環引用檢測到異常,而序列化對象到JSON](http://stackoverflow.com/questions/16949520/circular-reference-detected-exception-while-serializing-object-to-json) –

+0

@佩羅我看不到你的鏈接是重複的。我的代碼基於生成的MVC控制器的腳手架。我所做的全部都是用引導表幫助程序替換了html表格和每個項目代碼。正如我所提到的,我已經爲7個其他數據庫表使用了相同的方法,它們都可以工作。我有一種感覺,這張桌子由於與其他桌子有很多關係而沒有被正確支撐(編輯)。 – Mych

+0

但是,很可能是由於EF生成的動態代理對象由默認的json序列化程序導致序列化失敗,該表的複雜性。 –

回答

0

看來,實體框架可以有問題腳手架涉及的關係。在這張表的情況下,我不得不創建自己的視圖和代碼。