我在索引视图中更新部分视图时遇到了一些问题。基本上,基于点击,我希望有更新的信息。
//controller
public ActionResult Index()
{
var filteredObservations = getFilteredObservationSessions().ToList();
var observationManagementVm = new ObservationManagementVM(filteredObservations);
return View(observationManagementVm);
}
public ActionResult indexPagedSummaries(int? page, List<ObservationSessionModel> data)
{
var alreadyFilteredObservations = data;
int PageSize = 10;
int PageNumber = (page ?? 1);
return PartialView(alreadyFilteredObservations.ToPagedList(PageNumber, PageSize));
}
我的主要观点
//index.cshtml
@model AF.Web.ViewModels.ObservationManagementVM
....
<div id="testsim">
@Html.Action("indexPagedSummaries", new { data = Model.ObservationSessions })
</div>
<input id="new-view" value="Sessions" type="button" />
<script>
$("#new-view").click(function() {
$.ajax({
type: "GET",
data: { data: "@Model.FeedBackSessions" },
url: '@Url.Action("indexPagedSummaries")',
cache: false,
async: true,
success: function (result) {
console.log(result);
$('#testsim').html(result);
$('#testsim').show();
}
});
});
</script>
....
我的部分观点
//indexPagedSummaries.cshtml
@model PagedList.IPagedList<AF.Services.Observations.ObservationSessionModel>
@using (Html.BeginForm("indexPagedSummaries"))
{
<ol class="vList vList_md js-filterItems">
@foreach (var item in Model)
{
@Html.DisplayFor(modelItem => item)
}
</ol>
<div>
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
@Html.PagedListPager(Model, page => Url.Action("Index",
new { page }))
</div>
}
Html.Action()返回我想要的完美内容,但似乎无法通过按钮点击触发。
所以,我没有收到任何错误,但网址没有提供任何数据。当我尝试运行Observation / indexPagedSummary url而不传入数据时,我得到一个System.ArgumentNullException错误,因此我假设正在将某些内容传输到视图模型。任何帮助都会非常感激。
答案 0 :(得分:1)
没有运行您的代码,但我认为这是因为您没有随@ Url.Action一起发送数据
主要观点:
//index.cshtml
@model AF.Web.ViewModels.ObservationManagementVM
....
<div id="testsim">
@Html.Action("indexPagedSummaries", new { data = Model.ObservationSessions })
</div>
<input id="new-view" value="Sessions" type="button" />
<script>
$("#new-view").click(function() {
$.ajax({
type: "GET",
data: { data: "@Model.FeedBackSessions" },
url: '@Url.Action("indexPagedSummaries", "[Controller Name]", new { data = Model.ObservationSessions})',
cache: false,
async: true,
success: function (result) {
console.log(result);
$('#testsim').html(result);
$('#testsim').show();
}
});
});
</script>
如果这没有帮助,当我遇到内容类型不匹配或数据类型不匹配时,我遇到了问题。您可能需要将这些添加到您的ajax请求中。
答案 1 :(得分:0)
将您的ajax数据行更改为:
data: { data: JSON.stringify(@Model.FeedBackSessions) },
您可能还需要将这些行添加到ajax:
dataType: 'json',
contentType: 'application/json; charset=utf-8',
您可以在上面的一条评论中看到,当前的URL正在形成一个列表对象的描述,而不是它的内容:
http://localhost:60985/Observation/indexPagedSummaries的数据= System.Collections.Generic.List 强>%601%5BAF.Services.Observations.ObservationSessionModel%5D&安培;数据= System.Collections.Generic.List%601% 5BAF.Services.Observations.ObservationSessionModel%5D&安培; _ = 1482453264080
我不确定是否有更好的方法,但您甚至可能必须在发布之前手动将模型数据转换为Javascript。
例如:
<script>
var temp = [];
@foreach (var item in Model.FeedBackSessions){
@:temp.push(@item);
}
</script>
然后data: { data: JSON.stringify(temp) },