2013-04-22 153 views
1

我從Ajax調用填充Webgrid時遇到問題。從Ajax調用填充Webgrid

我按照以下線程中顯示的示例進行操作:mvc3 populating bind webgrid from ajax但是,這並未產生任何結果。

當我運行網站時,我總是收到消息:「Error:undefined」。

在調試代碼時,我確信問題在於返回PartialView是問題,因爲我的Ajax成功方法中的數據對象沒有被數據填充。

這裏是我的代碼示例:

Ajax調用:

$.fn.getCardResult = function (leerling, kaart) { 
     $.ajax({ 
      type: "GET", 
      url: '@Url.Action("GetResults","Kaarten")', 
      data: { leerlingID: leerling, cardID: kaart }, 
      cache: false, 
      success: function (data) { 
       console.log(data); 
       if (!data.ok) { 
        window.alert(' error : ' + data.message); 
       } 
       else { 
        $('#card').html(data); 
       } 
      } 
     }); 
    } 

部分查看呼叫:

<div class="card-content" id="card"> 
    @{ 
     if(Model.Kaart != null && Model.Kaart.Count > 0) 
     { 
      @Html.Partial("_Kaarten") 
     } 
     else 
     { 
      @: Er zijn geen kaarten beschikbaar. 
     } 
    } 
</div> 

管窺:

@model List<ProjectCarrousel.Models.KaartenModel> 

@{ 
    var grid = new WebGrid(source: Model,ajaxUpdateContainerId: "card", 
     defaultSort: "Topicname"); 

    grid.GetHtml(
     tableStyle: "webgrid", 
     columns: grid.Columns(
      grid.Column("Topicname", "Topic"), 
      grid.Column("Taskname", "Taken"), 
      grid.Column("Taskpoints", "Punten"), 
      grid.Column("Grades", "Resultaat"), 
      grid.Column("Date", "Datum"), 
      grid.Column("Teachercode", "Paraaf Docent") 
     ) 
    ); 
} 

控制器代碼:

public ActionResult GetResults(int leerlingID, string cardID) 
    { 
     try 
     { 
      int Ovnumber = leerlingID; 
      string CardId = cardID; 

      List<KaartenModel> kaartlijst = new List<KaartenModel>(); 


      IEnumerable<topic> topics = _db.topic.Include("tasks.studenttotask").Where(i => i.CardID == CardId); 
      foreach (topic topic in topics) 
      { 
       foreach (tasks task in topic.tasks) 
       { 
        KaartenModel ka = new KaartenModel(); 

        ka.Topicname = task.topic.Topicname; 
        ka.Taskname = task.Taskname; 
        ka.Taskpoints = task.Taskpoints; 
        ka.Ranks = task.Ranks; 
        ka.Date = task.studenttotask.Where(i => i.Ovnumber == Ovnumber).Select(d => d.Date).SingleOrDefault(); 
        ka.Grades = task.studenttotask.Where(i => i.Ovnumber == Ovnumber).Select(d => d.Grades).SingleOrDefault(); 
        ka.Teachercode = task.studenttotask.Where(i => i.Ovnumber == Ovnumber).Select(d => d.Teachercode).SingleOrDefault(); 
        kaartlijst.Add(ka); 
       } 
      } 

      KVM.Kaart = kaartlijst; 

      return PartialView("_Kaarten", KVM.Kaart); 

     } 
     catch (Exception ex) 
     { 
      return Json(new { ok = false, message = ex.Message }); 
     } 
    } 

如果有人能幫助它將不勝感激。

UPDATE

擺弄了一下後,我發現我工作的解決方案。下面是一個更新的Ajax呼叫片段:

我找到的解決方案也是以另一種方式製作Success方法。這確保了部分視圖正確呈現。以下是Ajax調用代碼片段。

$.ajax({ 
    url: '@Url.Action("GetAjaxCall","Home")', 
    contentType: 'application/html; charset=utf-8', 
    type: 'GET', 
    dataType: 'html', 
    data: { id: id }, 
}) 
.success(function (result) { 
    $('#sectionContents').html(result); 
}) 
.error(function (xhr, status) { 
    alert(xhr.responseText); 
}); 
+0

如果它的一個AJAX調用那麼你就應該返回一個JSON對象,而不是PartialView ...'返回JSON(新{@data = KVM.Kaart},JsonRequestBehavior.AllowGet);' – musefan 2013-04-22 14:32:33

+0

嗯,我發現了這個問題,那不是它。顯然,你不想像我最初所做的那樣有一個成功的方法。我將用新的Ajax調用更新我的問題。 – Timelog 2013-04-22 19:26:28

+0

如果你已經解決了你的問題,你自己發佈一個答案 – musefan 2013-04-22 21:05:48

回答

2

我找到的解決方案也是以另一種方式使Success方法成功。這確保了部分視圖正確呈現。以下是Ajax調用代碼片段。

$.ajax({ 
    url: '@Url.Action("GetAjaxCall","Home")', 
    contentType: 'application/html; charset=utf-8', 
    type: 'GET', 
    dataType: 'html', 
    data: { id: id }, 
}) 
.success(function (result) { 
    $('#sectionContents').html(result); 
}) 
.error(function (xhr, status) { 
    alert(xhr.responseText); 
}); 
+1

SectionContents是什麼?我正在嘗試做同樣的事情.. – 2014-02-09 19:20:38