2013-08-29 37 views
2

我有一些(動態分配數量)的Kendo網格在Razor PartialView中運行。網格旨在通過MVC控制器的AJAX請求數據。控制器接收到讀取請求,請求狀態良好,控制器通過JSON將數據傳回(通過Fiddler驗證)。 不幸的是,網格從不顯示數據。我對此感到陌生,對於從哪裏開始感到不知所措。據我所知,代碼與此場景中的Kendo示例相匹配。這不是數據或模型問題,因爲它們都在應用程序的其他部分使用而沒有問題。MVC控制器傳遞JSON數據,但Kendo網格不顯示它

控制器:

public class MemberController : Controller 
{ 
    private MemberContext db = new MemberContext(); 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Grid_Member_Read([DataSourceRequest] DataSourceRequest request, 
     int club_id) 
    { 
     var results = from r in db.Members where r.MemberClub.Id == club_id select r; 
     return Json(results.ToDataSourceResult(request)); 
    } 
} 

的PartialView:

@(Html.Kendo().Grid<RegistrationManagement.Models.Member>() 
.Name("MembersGrid") 
.Columns(columns => 
{ 
    columns.Bound(p => p.LastName); 
    columns.Bound(p => p.FirstName); 
    columns.ForeignKey(p => p.MemberStatusID, (System.Collections.IEnumerable)ViewData["status"], "Value", "Text"); 
    columns.Bound(p => p.RegistrationYear); 
    columns.Bound(p => p.StreetAddress1); 
    columns.Bound(p => p.StreetAddress2); 
    columns.Bound(p => p.State); 
    columns.Bound(p => p.ZipCode); 
    columns.Bound(p => p.Email); 
    columns.Bound(p => p.PhoneNumber); 
    columns.Command(command => { command.Custom("Edit2").Click("CustomEdit"); command.Edit(); command.Destroy(); }).Width(160); 

}) 
     .ToolBar(toolbar => toolbar.Create()) 
.Editable() 
.Groupable() 
.Pageable() 
.Sortable() 
.Scrollable() 
.Filterable() 
.DataSource(dataSource => dataSource 
    .Ajax() 
    .PageSize(20) 
    .Batch(true) 
    .ServerOperation(false) 
    .Events(events => events.Error("error_handler")) 
    .Model(model => 
     { 
      model.Id(p => p.Id); 
      model.Field(p => p.MemberStatus).Editable(false); 
     }) 
    .Read(read => read 
     .Action("Grid_Member_Read", "Member", new { club_id = @ViewBag.ClubID }) 

    ) 
    .Create(create => create.Action("Grid_Member_Create", "Member", new { ClubID = @ViewBag.ClubID })) 
    .Update(update => update.Action("Grid_Member_Update", "Member")) 
    .Destroy(destroy => destroy.Action("Grid_Member_Destroy", "Member")) 
) 
) 

function error_handler(e) { 
    if (e.errors) { 
     var message = "Errors:\n"; 
     $.each(e.errors, function (key, value) { 
      if ('errors' in value) { 
       $.each(value.errors, function() { 
        message += this + "\n"; 
       }); 
      } 
     }); 
     alert(message); 
    } 
} 
function CustomEdit(e) { 
    e.preventDefault(); 

    var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 

} 

的提琴手數據:

控制器的響應網格線1的讀出請求:

{"Data":[{"MemberClub":{"ClubRegion":{"Id":0,"Code":"TE","Name":"Test"},"ClubStatus":  {"Id":0,"Name":"Unknown"},"RelationshipManager":{},"Id":1,"ClubName":"B  Club","RegistrationYear":2000,"StreetAddress1":"street","StreetAddress2":"a","City":"city","State":"state","ZipCode":11111,"PhoneNumber":"555-1212","Email":"[email protected]","URL":"www.w.w."},"MemberStatus":{"Id":2,"Name":"Active"},"Id":1,"MemberClubID":1,"MemberStatusID":2,"MembershipNumberRoot":1,"LastName":"last","FirstName":"Edited","StreetAddress1":"street","StreetAddress2":"a","City":"city","State":"state","ZipCode":"11111","PhoneNumber":"555-1212","Email":"[email protected]","RegistrationYear":2000},{"MemberClub":{"ClubRegion":{"Id":0,"Code":"TE","Name":"Test"},"ClubStatus":{"Id":0,"Name":"Unknown"},"RelationshipManager":{},"Id":1,"ClubName":"B Club","RegistrationYear":2000,"StreetAddress1":"street","StreetAddress2":"a","City":"city","State":"state","ZipCode":11111,"PhoneNumber":"555-1212","Email":"[email protected]","URL":"www.w.w."},"MemberStatus":{"Id":10,"Name":"New"},"Id":10,"MemberClubID":1,"MemberStatusID":10,"MembershipNumberRoot":null,"LastName":"1","FirstName":"1","StreetAddress1":"1","StreetAddress2":"1","City":null,"State":"1","ZipCode":"1","PhoneNumber":"1","Email":"1","RegistrationYear":1},{"MemberClub":{"ClubRegion":{"Id":0,"Code":"TE","Name":"Test"},"ClubStatus":{"Id":0,"Name":"Unknown"},"RelationshipManager":{},"Id":1,"ClubName":"B Club","RegistrationYear":2000,"StreetAddress1":"street","StreetAddress2":"a","City":"city","State":"state","ZipCode":11111,"PhoneNumber":"555-1212","Email":"[email protected]","URL":"www.w.w."},"MemberStatus":{"Id":10,"Name":"New"},"Id":11,"MemberClubID":1,"MemberStatusID":10,"MembershipNumberRoot":null,"LastName":"2","FirstName":"2","StreetAddress1":"2","StreetAddress2":"2","City":null,"State":"2","ZipCode":"2","PhoneNumber":"2","Email":"2","RegistrationYear":2}],"Total":3,"AggregateResults":null,"Errors":null} 

控制器的網格2的響應讀取請求:

{"Data":[{"MemberClub":{"RelationshipManager":{},"Id":2,"ClubName":"Test Club","RegistrationYear":2000,"StreetAddress1":"street","StreetAddress2":"a","City":"city","State":"state","ZipCode":11111,"PhoneNumber":"555-1212","Email":"[email protected]","URL":"www.w.w.","ClubRegion":{"Id":0,"Code":"TE","Name":"Test"},"ClubStatus":{"Id":0,"Name":"Unknown"}},"MemberStatus":{"Id":10,"Name":"New"},"Id":13,"MemberClubID":2,"MemberStatusID":10,"MembershipNumberRoot":2,"LastName":"Dude","FirstName":"Random","StreetAddress1":"street","StreetAddress2":"a","City":"City","State":"State","ZipCode":"11111","PhoneNumber":"555-1212","Email":"[email protected]","RegistrationYear":2012}],"Total":1,"AggregateResults":null,"Errors":null} 

響應網格3:

{ 「數據」:[ ],「Total」:0,「AggregateResults」:null,「Errors」:null}

(這是正確的)

在我開始顯示多個網格之前,我有一個網格,它使用從控制器傳遞的模型來包含數據。這工作完美。然後我添加了動態網格創建(三個網格都使用了傳遞的模型),並且它們都顯示了最後一次請求的模型數據,所以我開始使用AJAX方法。

這個問題不是很愚蠢;以前曾經問過非常類似的問題,但這些問題都沒有爲控制器的讀取功能(正確填充)傳遞額外的值,並且據我所知,我已經實施了在這些問題中推薦的更改以及Kendo網站沒有成功。

這必須是一些基本的基礎。有任何想法嗎?

謝謝!

+0

你能檢查一下你的網格沒有重名嗎?這可能是這種行爲的原因。 (注意:您似乎沒有將讀取的類型指定爲POST) –

回答

0

嘗試從ActionMethod

0

去除[AcceptVerbs(HttpVerbs.Post)]屬性可以從劍道電網發送JSON數據MVC控制器 您需要按照這些步驟

  1. Stringfy JSON數據,並通過Ajax調用
  2. 發送數據
  3. 在控制器接收數據列表中

    var serviceUrl = '/Enrollment/EnrollCourse'; 
          //Pass the items from the grid to the controll. Enroll a user for a course 
          $.ajax({ 
           type: "POST", 
           url: serviceUrl, 
           data: JSON.stringify($("#grid").data("kendoGrid").dataItems()), 
           contentType: "application/json; charset=utf-8", 
           dataType: "json" 
          }).done(function (data, textStatus, request) { 
           alert('success.'); 
           $("#grid").data('kendoGrid').dataSource.data([]); 
    
          }).fail(function (jqXHR, textStatus, errorThrown) { 
           alert('Error.'); 
          }); 
    

    [HttpPost] public ActionResult EnrollCourse(IEnumerable enrollments) { return Json(JsonRequestBehavior.AllowGet); }

    Note: Do not try to corrupt JSON data as mentioned by Kendo UI admin 
        data: JSON.stringify({ Technicians:("#Technicians").data("kendoMultiSelect").dataItems() }) 
    
0

嘗試在你的控制器REAS操作方法添加 「JsonRequestBehavior.AllowGet」。並且不需要添加「[AcceptVerbs(HttpVerbs.Post)]」。

  public class MemberController : Controller 
      { 
       private MemberContext db = new MemberContext();      
       public ActionResult Grid_Member_Read([DataSourceRequest] DataSourceRequest request, 
        int club_id) 
       { 
        var results = from r in db.Members where r.MemberClub.Id == club_id select r; 
        return Json(results.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 
       } 
      } 
相關問題