1

我在从 Ajax 调用中填充 Webgrid 时遇到问题。

我已经按照以下线程中所示的示例进行操作:mvc3 populating bind webgrid from ajax然而,这并没有产生任何结果。

当我运行网站时,我总是收到消息:“错误:未定义”。

在调试代码时,我很确定问题在于返回的 PartialView 是问题所在,因为我在 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 });
        }
    }

如果有人可以提供帮助,将不胜感激。

更新

在摆弄了一下之后,我找到了一个对我有用的解决方案。下面是更新的 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);
 });
4

1 回答 1

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);
 });
于 2013-04-23T10:11:30.883 回答