【问题标题】:JsonConvert SerializeObject with Func property具有 Func 属性的 JsonConvert SerializeObject
【发布时间】:2016-05-05 07:33:20
【问题描述】:

我的 Razor 视图我有如下模板

@helper EditLink(SampleEmployeeModel data)
    {
    <b>
        @Html.ActionLink("Edit", "Edit", new { id =data.ID }, new { @class = "modal_link" })
    </b>
}

然后我在我的网格控件中使用这个模板,如下所示。 Grid Helper 方法基于JQuertDataTable 工作。

@(
        Html.Grid<SampleEmployeeModel>()
        .SetName("GridEmployeeServerSide")
        .Columns(columns =>
        {
            columns.Bound(b => b.ID).EnableSearch(false); 
            columns.Bound().Template(o => EditLink(o)).SetTitle("Edit");
        })
        .Pageable(a => a.SetPageType(PageType.full_numbers))
        .DataSource(a =>
        {
            a.Read(read => read.Action("RRDLDataTableAjaxData"));
            a.ServerSideProcessing(true);
        })
    )

RRDLDataTableAjaxData 应该像下面这样返回记录

 [
    {"ID":1,"Edit":"<b>\r\n<a class=\"modal_link\" href=\"/Samples/Edit/1\">Edit</a>\r\n</b>\r\n"},
    {"ID":2,"Edit":"<b>\r\n<a class=\"modal_link\" href=\"/Samples/Edit/2\">Edit</a>\r\n</b>\r\n"},
    {"ID":3,"Edit":"<b>\r\n<a class=\"modal_link\" href=\"/Samples/Edit/3\">Edit</a>\r\n</b>\r\n"}
 ]

第一次加载网格时我得到了预期的结果,如果我转到第二页,它不会返回预期的 JSon。

Helper 方法是如何生成 HTML Grid 的 它将波纹管代码写入 Razor 视图

 <table class="table table-striped nowrap dt-responsive" data-rrdl-grid="" id="RRDLGrid21V52" width="100%">
        <thead>
            <tr>
                <TH></TH>  
                <TH></TH>
            </tr>
        </thead>
        <tbody></tbody>
    </table> 

    <script type='text/javascript'>
    var dataTable_GridEmployeeServerSide_Option =  {
  "columns": [
    {
      "targets": 1,
      "defaultContent": "",
      "data": "ID",
      "title": "ID",
      "visible": true
    },   
    {
      "targets": 2,
      "defaultContent": "",
      "data": "Edit",
      "searchable": true,
      "title": "Edit",
      "visible": true
    }
  ],
  "dom": "<'table-header-row' <'dom-left' ><'dom-center' ><'dom-right' lp>>t",
  "autoWidth": false,
  "deferRender": true,
  "info": false,
  "lengthChange": false,
  "ordering": true,
  "paging": true,
  "processing": false,
  "searching": false,
  "serverSide": true,
  "stateSave": false,
  "ajax": {
    "contentType": "application/json; charset=utf-8",
    "url": "../Samples/RRDLDataTableAjaxData",
    "dataType": "json",
    "dataSrc": "data"
  },
  "destroy": false,
  "orderClasses": false,
  "orderMulti": false,
  "pageLength": 10,
  "pagingType": "full_numbers",
  "scrollCollapse": false,
  "language": {
    "paginate": {
      "first": "<i class=\"icon-left\"></i><i class=\"icon-left\"></i>",
      "last": "<i class=\"icon-right\"></i><i class=\"icon-right\"></i>",
      "next": "<i class=\"icon-right\"></i>",
      "previous": "<i class=\"icon-left\"></i>"
    }
  },
  "OddRowColor": null,
  "EvenRowColor": null,
  "FixedRowHeight": 0,
  "HighlightSearchText": false,
  "SelectCheckBox": false,
  "RowTemplate": null
}
    $(document).ready(function () {
_DataTable(GridEmployeeServerSide);}
)
    </script>

我的问题是当用户单击第二页时如何将 EditLink 传递到帮助服务器。

【问题讨论】:

  • 你不能序列化委托。
  • 其实我想把mvc Server端Razor模板序列化成Json 有没有其他办法呢。
  • 这意味着什么?模板不是对象。

标签: asp.net-mvc razor json.net


【解决方案1】:

错误显示导致错误的不同属性。显然是ApplicationInstance 导致了循环引用。它与提供的代码 sn-p 无关。

根据 Json.Net 文档,您可以使用以下设置避免循环引用问题:

var jsonSerializerSettings = new JsonSerializerSettings
{
    PreserveReferencesHandling = PreserveReferencesHandling.Objects
};

【讨论】:

  • 我收到如下错误无法通过非托管函数指针、动态方法或委托创建者程序集之外的方法序列化委托。
猜你喜欢
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多