2017-01-18 6 views
0

Я пытаюсь отправить данные (объект json) с контроллера на представление и отобразить данные в jqgrid, но я не могу связать данные с jqgrid , Данные печатаются в браузере в формате JSON. Я не могу понять, где код поступил неправильно. here is the output what i getНе удалось представить данные в jqgrid ASP.NET MVC

КОНТРОЛЛЕР

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.Mvc; 
    using Prism.Models; 
    using System.Web.Script.Serialization; 


    namespace Prism.Controllers 
    { 
     public class SakilaController : Controller 
     { 
      // GET: Sakila 
      public JsonResult Index() 
      { 
       List<ActorModel> actormodel = new List<ActorModel>(); 
       using (var context = new sakilaEntities()) 
       { 

        List<actor> b = context.actors.ToList(); 
        actormodel.Add(new ActorModel() 
        {id = 1, 
        f_name = "MS", 
        l_name = "Vivek", 
        last_update = DateTime.Now}); 
       } 
     return Json(actormodel.ToList(), JsonRequestBehavior.AllowGet); 

     } 
    } 
    } 

Index.cshtml

<link href="~/Content/themes/base/jquery-ui.css" rel="stylesheet" /> 
 
    <link href="~/Content/jquery.jqGrid/ui.jqgrid.css" rel="stylesheet" /> 
 
    <script src="~/Scripts/jquery-3.1.1.min.js"></script> 
 
    <script src="~/Scripts/jquery-ui-1.12.1.min.js"></script> 
 
    <script src="~/Scripts/i18n/grid.locale-en.js"></script> 
 
    <script src="~/Scripts/jquery.jqGrid.min.js"></script> 
 
    <script src="~/Scripts/MyGrid.js"></script> 
 

 

 
test 
 
<script> 
 
$(document).ready(function() { 
 
    $("#grid").jqGrid({ 
 
     url: 'Index/Sakila', 
 
     datatype: "json", 
 
     contentType: "application/json", 
 
     colNames: ['actor_id', 'f_name', 'l_name'], 
 
     colModel: [ 
 
     { name: 'id', index: 'id', width: 20 }, 
 
     { name: 'f_name', index: 'f_name', width: 150 }, 
 
     { name: 'l_name', index: 'l_name', width: 150 } 
 
     ], 
 
     rowNum: 10, 
 
     mtype: "POST", 
 
     rowList: [10, 20, 30], 
 
     pager: '#pager', 
 
     loadonce: false, 
 
     viewrecords: true, 
 
     sortorder: "desc", 
 
     autoencode: true, 
 
     caption: "Company approval" 
 
    }); 
 
    jQuery("#grid").jqGrid('navGrid', '#pager', { edit: false, add: false, del: false }); 
 
}); 
 

 
</script> 
 
    
 
    
 
<table id="grid" ></table> 
 
<div id="pager"></div> 
 

 

Макет

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="utf-8" /> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
 
    <title>@ViewBag.Title - My ASP.NET Application</title> 
 
    @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") 
 

 
</head> 
 

 
<body> 
 
    <div class="navbar navbar-inverse navbar-fixed-top"> 
 
    <div class="container"> 
 
     <div class="navbar-header"> 
 
     <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
 
      <span class="icon-bar"></span> 
 
      <span class="icon-bar"></span> 
 
      <span class="icon-bar"></span> 
 
     </button> 
 
     @Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) 
 
     </div> 
 
     <div class="navbar-collapse collapse"> 
 
     <ul class="nav navbar-nav"> 
 
      <li>@Html.ActionLink("Home", "Index", "Home")</li> 
 
      <li>@Html.ActionLink("About", "About", "Home")</li> 
 
      <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
 
     </ul> 
 
     @Html.Partial("_LoginPartial") 
 
     </div> 
 
    </div> 
 
    </div> 
 
    <div class="container body-content"> 
 
    @RenderBody() 
 
    <hr /> 
 
    <footer> 
 
     <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p> 
 
    </footer> 
 
    </div> 
 

 
    @RenderSection("scripts", required: false) 
 
</body> 
 

 
</html>

+0

Попробуйте изменить ваш jqGrid URL: «@ Url.RouteUrl (новое {действия = "Index", контроллер = "Sakila"}) ' –

+0

. Спасибо за ваш ответ. Я уже пробовал, но он не работает. –

ответ

1

То, что я понял, ваш браузер ударять «Шакил/индекс», который является методом а что возвращающая JsonResult. Таким образом, вы должны получать объект JSON через браузер.

В коде Jqgrid вы используете URL-адрес as'Index/Sakila», который является метод, который вы не упомянуть в этом вопросе. (Я не знаю, что это существует или нет)

Исходя из выше, я бы как предлагать вам, использовать правильные URL-адреса для каждого запроса. URL-адрес браузера должен ударить по методу конроллера, который возвращает представление, чтобы просмотреть вашу страницу в браузере, и Jqgrid должен правильно настроить правильный метод JsonResult (по запросу «shakila/index»)

пример кода

JS

$("#grid").jqGrid({ 
     url: 'Sakila/GetData', 
     datatype: "json", 
     contentType: "application/json", 
     colNames: ['actor_id', 'f_name', 'l_name'], 
     colModel: [ 
     { name: 'id', index: 'id', width: 20 }, 
     { name: 'f_name', index: 'f_name', width: 150 }, 
     { name: 'l_name', index: 'l_name', width: 150 } 
     ], 
     rowNum: 10, 
     mtype: "POST", 
     rowList: [10, 20, 30], 
     pager: '#pager', 
     loadonce: false, 
     viewrecords: true, 
     sortorder: "desc", 
     autoencode: true, 
     caption: "Company approval" 
    }); 
    jQuery("#grid").jqGrid('navGrid', '#pager', { edit: false, add: false, del: false }); 

C#

public class SakilaController : Controller 
     { 

      public JsonResult Index() 
      { 
       return view(); 
      } 
      public JsonResult GetData() 
      { 
       List<ActorModel> actormodel = new List<ActorModel>(); 
       using (var context = new sakilaEntities()) 
       { 

        List<actor> b = context.actors.ToList(); 
        actormodel.Add(new ActorModel() 
        {id = 1, 
        f_name = "MS", 
        l_name = "Vivek", 
        last_update = DateTime.Now}); 
       } 
     return Json(actormodel.ToList(), JsonRequestBehavior.AllowGet); 

     } 
    } 

Browser зовёт Саки л/Index и Jqgrid звонят Sakila/GetData Пожалуйста, обратите внимание, что MVC шаблон URL работает, как ControllerName/MethodName

+0

получил. Спасибо. Раньше я возвращал объект Json, а не индекс. –