Asp.Net MVC编辑器模板和无限滚动

时间:2014-07-08 13:55:25

标签: c# ajax asp.net-mvc editorfor

我有一个表数据的编辑模板作为MyProjectViewModel.cshtml

<div>
    <div>
        @Html.CheckBoxFor(model => model.Selected)
    </div>
    <div>
            for (int i = 1; i < @Model.TypeList.Count; i++)
            {
                    <p id="@Model.TypeList[i].ID" >@Model.TypeList[i].Name</p>
            }
    </div>
        @Html.HiddenFor(model => model.ID)
        @Html.HiddenFor(model => model.Name)
</div>

我有另一个视图,用于发布所选的Item,它具有以下语句来呈现编辑器模板。

<div id="loadDynamic">
@Html.EditorFor(model => model.NewItem)
</div>

如果我发布我能够获得所选项目。

但是现在我遇到了一个问题,因为这个数据必须在点击按钮时动态呈现。 Onload我将填充前10个项目并使用编辑器模板显示。

但是我被困住了如何使用Ajax获取接下来的10个数据并作为上述编辑模板的一部分附加。

我创建了以下Action和Ajax,但它似乎并不合适。

动作:

public ActionResult InfinateScroll(string lastID, string prjID)
{
   //Querying DB to get List<Model>
   //Not sure how to get the Editor Template here
   // Tried with following, though it is not the one I needed
   return Json(PartialView("~/Views/MyView/EditorTemplates/MyProjectViewModel.cshtml", model[0]));
}

的Ajax:

$a.ajax({
                type: "POST",
                url: '@Url.Action("InfinateScroll", "Project")',
                data: values,
                traditional: true,
                dataType: 'html',
                cache: false,
                success: function (data) {
                    $("#loadDynamic").append(data);
                    $("#loadingDiv").hide();
                },
});

这里即使我能够追加我在发布时获得之前选择的项目和新项目的可能性。请指导我。

1 个答案:

答案 0 :(得分:1)

我在您提供的代码中看到的唯一问题是您尝试将部分视图作为JSON返回。移除对Json的来电,然后返回PartialView(...)。那么,你应该是金色的。

如果不返回重复项,则需要将其视为实际的寻呼机。无限卷轴不仅返回10个新的随机项,它们不使用分页链接来分页数据。因此,当您发送AJAX请求时,您需要传递当前的“页面”,然后使用它来确定如何为返回创建数据。您可以使用SkipTake等LINQ帮助程序轻松地手动完成,但您可能会发现使用PagedList之类的第三方库更加容易。这取决于你。