【发布时间】:2013-11-27 18:34:49
【问题描述】:
这是我想要做的:
我的目标是在页面加载时显示来自页面模型的 Trending Opinions(自定义模型)列表。如果用户单击“显示更多趋势意见”按钮,它会使用 ajax 调用控制器上的方法,然后检索额外数量的项目,返回页面并显示它们。然后它又增加了20个。然后他们可以重复该过程并再次单击它,等等。
当您在项目列表上单击“显示更多”时,与普通网站完全相同。
如果我处理此问题的方式不正确,并且您知道任何教程(或只是在您的脑海中)显示在 MVC 4 中执行此操作的正确方法,请告诉我。我目前的做法并没有死心塌地,这只是我找到的“最正确”的方式。
我关注了一个类似问题的答案:How to Update List<Model> with jQuery in MVC 4
但是,通过我的控制器的数据不正确,我无法弄清楚问题所在。
让我尽可能多地提供信息,因为我不知道错误可能出在哪里。
页面模型(OpinionModel 有一些公共属性):
public class IndexModel
{
public IList<OpinionModel> TopTrendingOpinions { get; set; }
}
观点:
<div id="TrendingOpinions">
<p>What is trending at the moment</p>
@using (Html.BeginForm("LoadMoreTrendingOpinions", "AjaxHelper",
method: FormMethod.Post,
htmlAttributes: new { @class = "form-horizontal", id = "LoadTrendingOpinionsForm" }))
{
@Html.EditorFor(x => x.TopTrendingOpinions)
<input type="submit" value="Load More Trending Opinions" />
}
<script type="text/javascript">
$('#LoadTrendingOpinionsForm').submit(function () {
$.ajax({
url: this.action,
type: this.method,
data: {
topTrendingOpinions: $(this).serialize()
},
success: function (result) {
alert(result);
}
});
return false;
});
</script>
</div>
**我的模型还有一个 EditorTemplate。
控制器:**
[HttpPost]
public ActionResult LoadMoreTrendingOpinions(IList<MyGoldOpinionMVC.Models.OpinionModel> topTrendingOpinions)
{
var dataHelper = new Data.DataHelper();
var moreTrendingOpinions = dataHelper.LoadMoreTrendingOpinions(topTrendingOpinions.LastOrDefault().Id);
// var partialView = PartialView("../PartialViews/_ListOfPostedOpinion", moreTrendingOpinions);
return View(moreTrendingOpinions);
}
所以这里是事件的顺序: 运行站点时,表单会显示 OpinionModel 列表(使用显示正确数据的编辑器模板)。当我单击 SUBMIT 按钮时,它转到控制器(我有一个断点),“topTrendingOpinions”参数的数据是一个列表,其中包含一个项目,但该项目为空。所以换句话说,它没有通过明显用于填充表单的列表。
【问题讨论】:
标签: ajax list asp.net-mvc-4 controller