0

我在更新索引视图中的部分视图时遇到了一些问题。基本上,基于点击,我想要更新信息。

    //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() 完美地返回了我想要的东西,但它似乎无法通过单击按钮来触发。

所以,我没有收到任何错误,但 url 没有返回任何数据。当我尝试在不传入数据的情况下运行 Observation/indexPagedSummary url 时,我收到 System.ArgumentNullException 错误,因此我假设某些内容正在传输到视图模型。任何帮助将不胜感激。

4

2 回答 2

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 请求中。

于 2016-12-22T23:18:05.987 回答
0

将您的 ajax 数据行更改为:

data: { data: JSON.stringify(@Model.FeedBackSessions) },

您可能还需要将这些行添加到 ajax:

dataType: 'json',
contentType: 'application/json; charset=utf-8',

您可以在上面的一条评论中看到,当前 URL 是由 List 对象的描述而不是它的内容形成的:

http://localhost:60985/Observation/indexPagedSummariesdata=System.Collections.Generic.List %601%5BAF.Services.Observations.ObservationSessionModel%5D&data=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) },

于 2016-12-28T01:28:24.600 回答