0

こんにちは私はjqgridサブグリッドのtrirandの例を使用しています(Trirandの例の階層2レベル)。私の場合、サブグリッドの動作は自動生成されたjavascript関数内にあります。例をソリューション(mvc3 + razor + entity Framework Cf)に「変換」すると、自動生成されたサブグリッド関数で「オブジェクトはプロパティまたはメソッドをサポートしていません」というエラーが発生します。これは単純な間違いだと思いますが、私はそれを保存することはできません...そしてあなたが私を助けてくれることを願っています。

これは私の静的ビューです:

@{
    ViewBag.Title = "Index";
}
<script type="text/javascript">
    function showRolesSubGrid(subgrid_id, row_id) {
        // the "showSubGrid_OrdersGrid" function is autogenerated and available globally on the page by the second child grid. 
        // Calling it will place the child grid below the parent expanded row and will call the action specified by the DaraUrl property
        // of the child grid, with ID equal to the ID of the parent expanded row                
        showSubGrid_RolesSubGrid(subgrid_id, row_id);
    }
</script>
<div class="bloque">
    <div class="ui-widget">
        <h2>Index</h2>

        <p>
            @Html.ActionLink("Create New", "Create")
        </p>
        @Html.AntiForgeryToken() 
        <div>           
            @Html.Trirand().JQGrid(Model.MenuGrid, "MenuGrid")
            @Html.Trirand().JQGrid(Model.RolesSubGrid, "RolesSubGrid")

        </div>
        @Html.Trirand().JQAutoComplete(
                new JQAutoComplete 
                    {
                        DisplayMode = AutoCompleteDisplayMode.ControlEditor,
                        DataUrl = Url.Action("AutoCompleteName", "MenuItem")
                    }, "AutoCompleteName")
        @Html.Trirand().JQAutoComplete(
                new JQAutoComplete 
                    {
                        DisplayMode = AutoCompleteDisplayMode.ControlEditor,
                        DataUrl = Url.Action("AutoCompletePadre", "MenuItem")
                    }, "AutoCompletePadre")
    </div>
</div>

これは私のModelGridです:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Trirand.Web.Mvc;
using System.Web.UI.WebControls;


namespace MVC.Models.Grids
{
    public class MenuGridModel
    {
        public JQGrid MenuGrid { get; set; }
        public JQGrid RolesSubGrid { get; set; }
        public MenuGridModel()
        {
            RolesSubGrid = new JQGrid
            {
                Columns = new List<JQGridColumn>
                                 {
                                     new JQGridColumn { DataField = "RoleID",
                                                        HeaderText = "ID",
                                                        PrimaryKey = true,
                                                        Width = 50 },
                                     new JQGridColumn { DataField = "RoleName" }
                                 },
                Width = Unit.Pixel(650),
                Height = Unit.Pixel(350)
            };

            MenuGrid = new JQGrid
            {
                Columns = new List<JQGridColumn>()
                    {
                        new JQGridColumn { DataField = "ID", 
                                        // always set PrimaryKey for Add,Edit,Delete operations
                                        // if not set, the first column will be assumed as primary key
                                        PrimaryKey = true,
                                        Editable = false,
                                        Width = 20 },                                    
                        new JQGridColumn { DataField = "Name", 
                                        Editable = true,
                                        Width = 100 },
                        new JQGridColumn { DataField = "ActionName",                                                         
                                        Editable = true,
                                        Width = 100}, 
                        new JQGridColumn { DataField = "ControllerName", 
                                        Editable = true,
                                        Width = 100 },
                        new JQGridColumn { DataField = "Url",
                                        Editable =  true
                                        },
                        new JQGridColumn { DataField = "Padre",
                                        Editable =  true
                                        }
                    },
                Width = Unit.Percentage(100),
                Height = Unit.Percentage(100)
            };
            MenuGrid.ToolBarSettings.ShowRefreshButton = true;
        }
    }
}

これは私のコントローラーの一部です:

    ...
...
  public JsonResult Datos()
    {
        // instanciar el modelo
        var gridModel = new MenuGridModel();
        JsonResult verresul;
        ConfigGrid(gridModel);
        JQGridState gridState = gridModel.MenuGrid.GetState();
        Session["gridState"] = gridState;
        // devolver un databind según EF
        var prueba = GetMenuItem().AsQueryable();
        verresul = gridModel.MenuGrid.DataBind(prueba);
        return gridModel.MenuGrid.DataBind(GetMenuItem().AsQueryable());
    }

    // Este método se llama cuando la SUBgrilla requiere datos
    public JsonResult DatosRoles(string parentRowID)
    {
        int menu_padre_id = Convert.ToInt32(parentRowID);
        // instanciar el modelo
        var gridModel = new MenuGridModel();
        ConfigGrid(gridModel);

        // devolver un databind según EF
        //var Roles = from o in db.aspnetdb_Roles_vw
        //             where o.RoleId == menu_padre
        //             select o;
        List<List<aspnetdb_Roles_vw>> roles;
        //MenuItem pmenu;
        roles = (from pmenu in db.MenuItems 
                 where pmenu.Id == menu_padre_id
                 select pmenu)
                 .Select(rr => rr.aspnetdb_Roles_vw.ToList()).ToList();
        return gridModel.RolesSubGrid.DataBind(roles);
    }
...
...
    public void ConfigGrid(MenuGridModel modeloGrid)
    {
        var entidadGrid = modeloGrid.MenuGrid;
        var sub1Grid = modeloGrid.RolesSubGrid;

        // Personalizar o cambiar algunos comportamientos del modelo
        // ID de la grilla, por si hay varias
        entidadGrid.ID = "MenuGrid";
        // DataUrl mapea el método que devuelve los datos
        entidadGrid.DataUrl = Url.Action("Datos");
        // EditUrl mapea el método que hace ABM
        entidadGrid.EditUrl = Url.Action("ABM");
        entidadGrid.ToolBarSettings.ShowEditButton = true;
        entidadGrid.ToolBarSettings.ShowAddButton = true;
        entidadGrid.ToolBarSettings.ShowDeleteButton = true;
        entidadGrid.EditDialogSettings.CloseAfterEditing = true;
        entidadGrid.AddDialogSettings.CloseAfterAdding = true;
        entidadGrid.MultiSelect = true;
        entidadGrid.MultiSelectMode = MultiSelectMode.SelectOnCheckBoxClickOnly;
        // SUBgrilla
        #region SubGrilla
        entidadGrid.ClientSideEvents.SubGridRowExpanded = "showRolesSubGrid";
        entidadGrid.HierarchySettings.HierarchyMode = HierarchyMode.Parent;
        entidadGrid.HierarchySettings.ReloadOnExpand = Convert.ToBoolean(ViewData["reloadOnExpand"]);
        entidadGrid.HierarchySettings.SelectOnExpand = Convert.ToBoolean(ViewData["selectOnExpand"]);
        entidadGrid.HierarchySettings.ExpandOnLoad = Convert.ToBoolean(ViewData["expandOnLoad"]);
        entidadGrid.HierarchySettings.PlusIcon = Convert.ToString(ViewData["plusIcon"]);
        entidadGrid.HierarchySettings.MinusIcon = Convert.ToString(ViewData["minusIcon"]);
        entidadGrid.HierarchySettings.OpenIcon = Convert.ToString(ViewData["openIcon"]);
        sub1Grid.ID = "RolesGrid";
        sub1Grid.DataUrl = Url.Action("DatosRoles");
        sub1Grid.HierarchySettings.HierarchyMode = HierarchyMode.Child;
        #endregion
        ...
        ...

これは、自動生成されたサブグリッド関数を使用して動的に生成されたビューです。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml2/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta charset="utf-8" />
    <title>Index</title>

    <link href="../../Content/notificaciones.css" rel="stylesheet" type="text/css" />

    <script src="../../Content/jquery-ui/js/jquery-1.7.2.min.js" type="text/javascript"></script>
    <script src="../../Content/jquery-ui/js/jquery-ui-1.8.22.custom.min.js" type="text/javascript"></script>
    <link href="../../Content/jquery-ui/css/redmond/jquery-ui-1.8.22.custom.css" rel="stylesheet" type="text/css" />

    <link href="/Content/openid-shadow.css" rel="stylesheet" type="text/css" />
    <link href="/Content/openid.css" rel="stylesheet" type="text/css" />
    <script src="/Scripts/openid-jquery.js" type="text/javascript"></script>
    <script src="/Scripts/openid-en.js" type="text/javascript"></script>
    <script type="text/javascript"> $(document).ready(function () {openid.init('openid_identifier'); }); </script>

    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" />

    <script src="../../Content/jquery-vertical-accordion-menu/js/jquery.cookie.js" type="text/javascript"></script>
    <script src="../../Content/jquery-vertical-accordion-menu/js/jquery.hoverIntent.minified.js" type="text/javascript"></script>
    <script src="../../Content/jquery-vertical-accordion-menu/js/jquery.dcjqaccordion.2.7.js" type="text/javascript"></script>
    <script src="../../Content/jquery-vertical-accordion-menu/js/jquery.dcjqaccordion.2.7.min.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="../../Content/jquery-vertical-accordion-menu/css/skins/black.css" />
    <link rel="stylesheet" type="text/css" href="../../Content/jquery-vertical-accordion-menu/css/dcaccordion.css" />
    <link rel="stylesheet" type="text/css" href="../../Content/jquery-vertical-accordion-menu/css/skins/blue.css" />
    <link rel="stylesheet" type="text/css" href="../../Content/jquery-vertical-accordion-menu/css/skins/clean.css" />
    <link rel="stylesheet" type="text/css" href="../../Content/jquery-vertical-accordion-menu/css/skins/demo.css" />
    <link rel="stylesheet" type="text/css" href="../../Content/jquery-vertical-accordion-menu/css/skins/graphite.css" />
    <link rel="stylesheet" type="text/css" href="../../Content/jquery-vertical-accordion-menu/css/skins/grey.css" />

    <link href="../../Content/jqGrid/css/ui.jqgrid.css" rel="stylesheet" type="text/css" />
    <script src="../../Content/jqGrid/js/i18n/grid.locale-es.js" type="text/javascript"></script>
    <script src="../../Content/jqGrid/js/jquery.jqGrid.min.js" type="text/javascript"></script>
    <script src="../../Scripts/jquery.jqAutoComplete.min.js" type="text/javascript"></script>

    <script type="text/javascript" src="../../Content/Flexigrid/js/flexigrid.js"></script>
    <link href="../../Content/Flexigrid/css/flexigrid.css" rel="stylesheet" type="text/css" />

    <script src="../../Scripts/wiltel.js" type="text/javascript"></script>

    <script type="text/javascript">
        var menuLoaded = false;
        $(document).ready(function () {
                $.ajax({
                        url: "/Home/MenuLayout",
                        type: "GET",
                        success: function (response, status, xhr)
                                    {
                                        var nvContainer = $('#navcontainer');
                                        nvContainer.html(response);
                                        menuLoaded = true;
                                    },
                        error: function (XMLHttpRequest, textStatus, errorThrown)
                                {
                                        var nvContainer = $('#navcontainer');
                                        nvContainer.html(errorThrown);
                                }
                        });
        });
    </script>
</head>
<body>
    <div class="container-fluid">
        <div id="header" class="row-fluid">
           <div class="content-wrapper">
                <p class="site-title"><img src="../../Content/images/LOGO1.png" align ="middle" />
                WILTEL COMUNICACIONES S.A </p>
           </div>
            <div class="login" >
                    <p>
        Hola, <a class="username" href="/Account/ChangePassword" title="Change password">WILTEL01\eallasino</a>!
        <a href="/Account/LogOff">Log off</a>
    </p>

            </div>
        </div>
    </div>
    <div id="body">
       <div class= "menu1">
       <div >
           <div id="navcontainer">

           </div>
        </div>
       </div>


<script type="text/javascript">
    function showRolesSubGrid(subgrid_id, row_id) {
        // the "showSubGrid_OrdersGrid" function is autogenerated and available globally on the page by the second child grid. 
        // Calling it will place the child grid below the parent expanded row and will call the action specified by the DaraUrl property
        // of the child grid, with ID equal to the ID of the parent expanded row                
        showSubGrid_RolesSubGrid(subgrid_id, row_id);
    }
</script>
<div class="bloque">
    <div class="ui-widget">
        <h2>Index</h2>

        <p>
            <a href="/MenuItem/Create">Create New</a>
        </p>
        <input name="__RequestVerificationToken" type="hidden" value="1kCOOa9WHClxCC_hs3GU_kmTYaRTvE2iB1Wk5SLCNp18j3CJv15Kvu9sUrA92qUP-nC9DnXoqx7LoIvMPJMfUoXMFjWjcz0tdZV2VN78MhY4Hcwhv1mv5LXZ58zroMVIX7oXaBsvJFI77wRBC_zs8zP1XpY1" /> 
        <div>           
            <table id='MenuGrid'></table><div id='MenuGrid_pager'></div><script type='text/javascript'>
jQuery(document).ready(function() {jQuery('#MenuGrid').jqGrid({url: '/MenuItem/Datos?jqGridID=MenuGrid',editurl: '/MenuItem/ABM?jqGridID=MenuGrid&editMode=1',mtype: 'GET',datatype: 'json',page: 1,colNames: ["ID","Name","ActionName","ControllerName","Url","Padre"],colModel: [{"key":true,"searchoptions":{},"index":"ID","width":20,"name":"ID"},{"editable":true,"searchoptions":{dataInit:function(el) {setTimeout(function() {var ec = 'AutoCompleteName';if (typeof(jQuery(el).autocomplete) !== 'function')alert('JQAutoComplete javascript not present on the page. Please, include jquery.jqAutoComplete.min.js');jQuery(el).autocomplete( eval(ec + '_acid') );},200);}},"index":"Name","width":100,"name":"Name"},{"editable":true,"searchoptions":{},"index":"ActionName","width":100,"name":"ActionName"},{"editable":true,"searchoptions":{},"index":"ControllerName","width":100,"name":"ControllerName"},{"editable":true,"index":"Url","searchoptions":{},"name":"Url"},{"editoptions":{"value":"Inicio:Inicio;Acerca de...:Acerca de...;Tipos de Problemas:Tipos de Problemas;Menus:Menus;Usuarios:Usuarios;Áreas:Áreas;Workflow:Workflow;Interfaces:Interfaces;ERP:ERP;Administración:Administración;Prueba2:Prueba2;SubP1:SubP1;Roles:Roles"},"searchoptions":{dataInit:function(el) {setTimeout(function() {var ec = 'AutoCompletePadre';if (typeof(jQuery(el).autocomplete) !== 'function')alert('JQAutoComplete javascript not present on the page. Please, include jquery.jqAutoComplete.min.js');jQuery(el).autocomplete( eval(ec + '_acid') );},200);}},"editable":true,"index":"Padre","name":"Padre","edittype":"select"}],viewrecords: true,scrollrows: false,prmNames: { id: "ID" },headertitles: true,pager: jQuery('#MenuGrid_pager'),subGrid: true,subGridOptions: {},subGridRowExpanded: showRolesSubGrid,loadError: jqGrid_aspnet_loadErrorHandler,hoverrows: false,rowNum: 10,rowList: [10,20,30],editDialogOptions: {"closeAfterEdit":true,"recreateForm":true,errorTextFormat:function(data) { return 'Error: ' + data.responseText },editData:{ __RequestVerificationToken: jQuery('input[name=__RequestVerificationToken]').val() }},addDialogOptions: {"closeAfterAdd":true,"recreateForm":true,errorTextFormat:function(data) { return 'Error: ' + data.responseText },editData:{ __RequestVerificationToken: jQuery('input[name=__RequestVerificationToken]').val() }},delDialogOptions: {"recreateForm":true,errorTextFormat:function(data) { return 'Error: ' + data.responseText },delData:{ __RequestVerificationToken: jQuery('input[name=__RequestVerificationToken]').val() }},searchDialogOptions: {"resize":false,"recreateForm":true},jsonReader: { id: "ID" },sortorder: 'asc',multiselect: true,multiboxonly: true,width: '100%',height: '100%',viewsortcols: [false,'vertical',true]})
.navGrid('#MenuGrid_pager',{"edit":true,"add":true,"del":true,"search":true,"refresh":true,"view":false,"position":"left","cloneToTop":true},jQuery('#MenuGrid').getGridParam('editDialogOptions'),jQuery('#MenuGrid').getGridParam('addDialogOptions'),jQuery('#MenuGrid').getGridParam('delDialogOptions'),jQuery('#MenuGrid').getGridParam('searchDialogOptions') ).bindKeys();
function jqGrid_aspnet_loadErrorHandler(xht, st, handler) {jQuery(document.body).css('font-size','100%'); jQuery(document.body).html(xht.responseText);};jQuery('#MenuGrid').filterToolbar({});});</script>
            <table id='RolesSubGrid'></table><div id='RolesSubGrid_pager'></div><script type='text/javascript'>
function showSubGrid_RolesSubGrid(subgrid_id, row_id, message, suffix) {var subgrid_table_id, pager_id;
                        subgrid_table_id = subgrid_id+'_t';
                        pager_id = 'p_'+ subgrid_table_id;
                        if (suffix) { subgrid_table_id += suffix; pager_id += suffix;  }
                        if (message) jQuery('#'+subgrid_id).append(message);                        
                        jQuery('#'+subgrid_id).append('<table id=' + subgrid_table_id + ' class=scroll></table><div id=' + pager_id + ' class=scroll></div>');
                jQuery('#' + subgrid_table_id).jqGrid({url: '/MenuItem/DatosRoles?jqGridID=RolesSubGrid&parentRowID=' + row_id + '',editurl: '?jqGridID=RolesSubGrid&editMode=1&parentRowID=' + row_id + '',mtype: 'GET',datatype: 'json',page: 1,colNames: ["ID","RoleName"],colModel: [{"key":true,"searchoptions":{},"index":"RoleID","width":50,"name":"RoleID"},{"index":"RoleName","searchoptions":{},"name":"RoleName"}],viewrecords: true,scrollrows: false,prmNames: { id: "RoleID" },headertitles: true,pager: jQuery('#' + pager_id),loadError: jqGrid_aspnet_loadErrorHandler,hoverrows: false,rowNum: 10,rowList: [10,20,30],editDialogOptions: {"recreateForm":true,errorTextFormat:function(data) { return 'Error: ' + data.responseText },editData:{ __RequestVerificationToken: jQuery('input[name=__RequestVerificationToken]').val() }},addDialogOptions: {"recreateForm":true,errorTextFormat:function(data) { return 'Error: ' + data.responseText },editData:{ __RequestVerificationToken: jQuery('input[name=__RequestVerificationToken]').val() }},delDialogOptions: {"recreateForm":true,errorTextFormat:function(data) { return 'Error: ' + data.responseText },delData:{ __RequestVerificationToken: jQuery('input[name=__RequestVerificationToken]').val() }},searchDialogOptions: {"resize":false,"recreateForm":true},jsonReader: { id: "RoleID" },sortorder: 'asc',width: '650',height: '350',viewsortcols: [false,'vertical',true]})
.bindKeys();
function jqGrid_aspnet_loadErrorHandler(xht, st, handler) {jQuery(document.body).css('font-size','100%'); jQuery(document.body).html(xht.responseText);};}</script>

        </div>
        <script type='text/javascript'>var AutoCompleteName_acid = { id: 'AutoCompleteName',source: '/MenuItem/AutoCompleteName' };</script>
        <script type='text/javascript'>var AutoCompletePadre_acid = { id: 'AutoCompletePadre',source: '/MenuItem/AutoCompletePadre' };</script>
    </div>
</div>




    </div>

    <footer>
       <div class ="Info">
            <h3>INFO/NOVEDADES:</h3>

        </div>        
    </footer>
</body>
</html>

ここでエラーが発生します:

    jQuery('#' + subgrid_table_id).jqGrid({
    url: '/MenuItem/DatosRoles?jqGridID=RolesSubGrid&parentRowID=' + row_id + '',
    editurl: '?jqGridID=RolesSubGrid&editMode=1&parentRowID=' + row_id + '',
    mtype: 'GET',
    datatype: 'json',
    page: 1,
    colNames: ["ID", "RoleName"],
    colModel: [{
        "key": true,
        "searchoptions": {},
        "index": "RoleID",
        "width": 50,
        "name": "RoleID"
    }, {
        "index": "RoleName",
        "searchoptions": {},
        "name": "RoleName"
    }],
    viewrecords: true,
    scrollrows: false,
    prmNames: {
        id: "RoleID"
    },
    headertitles: true,
    pager: jQuery('#' + pager_id),
    loadError: jqGrid_aspnet_loadErrorHandler,
    hoverrows: false,
    rowNum: 10,
    rowList: [10, 20, 30],
    editDialogOptions: {
        "recreateForm": true,
        errorTextFormat: function (data) {
            return 'Error: ' + data.responseText
        },
        editData: {
            __RequestVerificationToken: jQuery('input[name=__RequestVerificationToken]').val()
        }
    },
    addDialogOptions: {
        "recreateForm": true,
        errorTextFormat: function (data) {
            return 'Error: ' + data.responseText
        },
        editData: {
            __RequestVerificationToken: jQuery('input[name=__RequestVerificationToken]').val()
        }
    },
    delDialogOptions: {
        "recreateForm": true,
        errorTextFormat: function (data) {
            return 'Error: ' + data.responseText
        },
        delData: {
            __RequestVerificationToken: jQuery('input[name=__RequestVerificationToken]').val()
        }
    },
    searchDialogOptions: {
        "resize": false,
        "recreateForm": true
    },
    jsonReader: {
        id: "RoleID"
    },
    sortorder: 'asc',
    width: '650',
    height: '350',
    viewsortcols: [false, 'vertical', true]
}).bindKeys();

解決の方向性を高く評価します...

4

1 に答える 1

0

私は問題を見つけました、それは私がアコーディオンメニューを表示するために使用するjavascriptセットにあります:

 <script src="../../Content/jquery-vertical-accordion-menu/js/jquery.cookie.js" type="text/javascript"></script>
<script src="../../Content/jquery-vertical-accordion-menu/js/jquery.hoverIntent.minified.js" type="text/javascript"></script>
<script src="../../Content/jquery-vertical-accordion-menu/js/jquery.dcjqaccordion.2.7.js" type="text/javascript"></script>
<script src="../../Content/jquery-vertical-accordion-menu/js/jquery.dcjqaccordion.2.7.min.js" type="text/javascript"></script>

スクリプトからこのブロックを削除すると、サブグリッドは正常に表示されます...このjavascriptの一部がjquery関数をリセットしているようです。

于 2012-09-25T15:34:26.770 に答える