我在从 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);
});