JQGrid ASP.Net MVC не удалось загрузить данные на корабль отношения многие ко многим - PullRequest
1 голос
/ 20 февраля 2012

Я пытаюсь создать простой проект по управлению ролями пользователей, используя asp.net mvc3 Entity Framework 4 (первая модель) и использую jqgrid для отображения данных.

, но почему, если я изменяю отношения данных междуПользователь таблицы и роль в судне отношений «многие ко многим» не удалось загрузить данные jqgrid.

Ниже приведены данные моего проекта:

Данные проекта:

  1. VS 2010
  2. ASP.Net MVC 3
  3. Просмотр: Razor
  4. ORM: Linq To Entity
  5. JQGrid Версия:jqGrid 3.8

  6. Пакет проекта:

    • EntityFramework "версия =" 4.1.10715.0
    • jQuery "версия =" 1.5.1
    • jQuery.UI.Combined "version =" 1.8.11
    • jQuery.Validation "version =" 1.8.0
    • jQuery.vsdoc "version =" 1.5.1 "
    • Modernizr "version =" 1.7
    • MvcScaffolding "version =" 1.0.6
    • T4Scaffolding "version =" 1.0.5

Модель:


- СШАer

    public partial class User
{

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string LoweredUserName { get; set; }
    public string MobileAlias { get; set; }
    public bool IsAnonymous { get; set; }
    public System.DateTime LastActivityDate { get; set; }

    public virtual ICollection<Role> Roles { get; set; }
}

- Роль

    public partial class Role
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int RoleId { get; set; }
    public string RoleName { get; set; }
    public string LoweredRoleName { get; set; }
    public string Description { get; set; }

    public virtual ICollection<User> Users { get; set; }
}


Контроллер-пользователь:

        public JsonResult GridData(int rows, int page)
    {
        var count = _context.Users.Count();

        var pageData = _context.Users.OrderBy(x => x.UserId).Skip((page - 1) * rows).Take(rows);

        return Json(new {
            page = page,
            records = count,
            rows = pageData,
            total = Math.Ceiling((decimal)count / rows)
        }, JsonRequestBehavior.AllowGet);
    }


View-Index.cshtml :

@model IEnumerable<CustomControler.Models.User>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<table id="ajaxGrid"></table>
<div id="ajaxGridPager"></div>

<script type="text/javascript">
    jQuery("#ajaxGrid").jqGrid({
        url: '@Url.Action("GridData")',
        datatype: "json",
        mtype: 'GET',
        colNames: ['UserId', 'UserName', 'LoweredUserName', 'MobileAlias', 'IsAnonymous', 'LastActivityDate'],
        colModel: [
            { name: 'UserId', index: 'UserId', editable: true, sortable: false, hidden: true },
            { name: 'UserName', index: 'UserName', editable: true, sortable: false, hidden: false },
            { name: 'LoweredUserName', index: 'LoweredUserName', editable: true, sortable: false, hidden: false },
            { name: 'MobileAlias', index: 'MobileAlias', editable: true, sortable: false, hidden: false },
            { name: 'IsAnonymous', index: 'IsAnonymous', editable: true, sortable: false, hidden: false },
            { name: 'LastActivityDate', index: 'LastActivityDate', editable: true, sortable: false, hidden: false }
        ],**
        rowNum: 5,
        pager: '#ajaxGridPager',
        width: '850',
        height: '15em'
    });
    //jsonReader: { repeatitems: false, id: "UserId" },
    jQuery("#ajaxGrid").jqGrid('navGrid', '#ajaxGridPager',
        { search: false, refresh: false },                     // General options
        { url: '@Url.Action("Edit")', closeAfterEdit: true },  // Edit options
        { url: '@Url.Action("Create")', closeAfterAdd: true }, // Add options
        { url: '@Url.Action("Delete")' }                       // Delete options                           
    );    
</script>


Главная страница

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=9" />

    <title>@ViewBag.Title</title>

    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.5.2.min.js")" type="text/javascript"></script>

    <!-- To support jqGrid -->
    <link href="@Url.Content("~/Content/themes/base/jquery.ui.all.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/ui.jqgrid.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/i18n/grid.locale-en.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.jqGrid.min.js")" type="text/javascript"></script>



</head>

Если я установлю комментарий к public virtual ICollection <Role> Roles {get; set;} в моей User модели, что означает, что я избавлюсь от корабля ролевых отношенийв таблицу, данные могут быть загружены в jqGrid.

1 Ответ

1 голос
/ 04 февраля 2013

Решено / Ответил tpeczek:

Проблема не в jqGrid, а в том, что JavaScriptSerializer пытается сериализовать все дерево объектов (и теряется в нем), самый простой способ - использовать анонимный объект (не идеальный, так как вам нужно набирать нужные свойства отправь, но сделаю свое дело)

См .: forums.asp.net

Надеюсь, что это будет полезно другим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...