传递视图模型以查看两次

本文关键字:两次 视图 模型 | 更新日期: 2023-09-27 18:36:05

我的家庭控制器中有以下索引方法:

    var homeIndexModel = new HomeIndexModel()
    {
        ActiveTasks = tasks.Where(
            task =>
                task.TaskStatus != TaskStatusEnum.Deferred &&
                task.TaskStatus != TaskStatusEnum.Verified && task.TaskStatus != TaskStatusEnum.Resolved),
        ClosedTasks = tasks.Where(
                task =>                            
                    task.TaskStatus == TaskStatusEnum.Resolved),
        DeferredTasks = tasks.Where(
            task =>
                task.TaskStatus == TaskStatusEnum.Verified ||
                task.TaskStatus == TaskStatusEnum.Deferred),
        Rules = m_errandSvc.GetAllRules(),
        Sources =
            Enum.GetValues(typeof(TaskSourceEnum)).Cast<TaskSourceEnum>().AsEnumerable().OrderBy(taskSource => taskSource.AsString()),
        Types = 
            Enum.GetValues(typeof(TaskTypeEnum)).Cast<TaskTypeEnum>().AsEnumerable().OrderBy(taskSource => taskSource.AsString()),
        Counties = counties,
        Reports = null,
    };
    return this.View(homeIndexModel);

此 homeIndexModel 在您访问第一页时传递到视图。如您所见,我将报告对象断言为 null。

我想在第一页上搜索时使用homeIndexModel的这个报告属性。当我点击"搜索"时,应该会出现一个模式并打印出搜索结果。

这是我在控制器中的搜索方法:

  [HttpPost]
        public ActionResult SearchReport(string searchVal, string searchParam)
        {
            var reports = m_errandSvc.GetReportSearch(searchVal, searchParam).ToList();
            var homeIndexModel = new HomeIndexModel()
            {
                Reports = reports
            };
            return this.View(homeIndexModel);
        } 

如您所见,我使用GetReportSearch的结果来解析Report属性。我想在下面循环访问这个对象:

<!-- Modal -->
<div class="modal" id="myModalSearch" aria-hidden="true" data-keyboard="false" data-backdrop="static">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-body">
                <div class="panel panel-default">
                    <div class="panel-heading">
                        <h4>FISH</h4>
                        @if (Model.Reports != null)
                        {
                        }
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

我遇到的问题是,当我添加一个foreach时,如下所示,我的调试模式退出。

   @if (Model.Reports != null)
   {
      foreach(var itm in Model.Reports)
      {
          <div>@itm.Report_id</div>
          <div>@itm.ReportSource</div>
      }
   }

我如何使用homeIndexViewModel解决整个问题并根据需要打印出我的搜索结果?

Herer 是我的 jQuery,我用它来发布到搜索方法:

    $('#searchReports').click(function () {
        var searchVal = $('#searchVal').val();
        $.ajax({
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            type: "POST",
            url: DataReview.BASE + "/Home/SearchReport",
            data: JSON.stringify(
                {
                    'searchVal': searchVal,
                    'searchParam': searchParam
                }
            )
        }).done(function (data) {
            console.log("YES");
        }).fail(function(data) {
            console.log("Fail " + data);
        });
    });

传递视图模型以查看两次

在搜索时再次传回视图模型,然后以这种方式向其分配报表。

 [HttpPost]
        public ActionResult SearchReport(string searchVal, string searchParam, HomeIndexModel homeIndexModel )
        {
            var reports = m_errandSvc.GetReportSearch(searchVal, searchParam).ToList();
            homeIndexModel.Reports = reports      
            return this.View(homeIndexModel);
        } 

或者最佳做法是您可以执行 Ajax 调用,然后仅获取报告数据并更新您的视图页面。但这需要 Jquery,如果您需要有关实现此目的的帮助,请告诉我。

编辑 1:对代码进行少量更改,以便由 ajax 完成此工作。

    $.ajax({
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            type: "POST",
            url: DataReview.BASE + "/Home/SearchReport",
            data: JSON.stringify(
                {
                    'searchVal': searchVal,
                    'searchParam': searchParam
                }
            )          
        })
        .done(function (reportData ) {              
            var $panelHeading = $('#myModalSearch .panel-heading');
            $('#myModalSearch .panel-heading').contents(':not(h4)').remove(); //remove previous search results
           $.each(reportData, function(i,v){             
                $panelHeading.append("<div>"+this.Report_id+"</div<div>"+this.ReportSource+"</div>");  //append new result
           });
        })

控制器必须返回 JSON 而不是视图,因此将代码更改为低于 1。

[HttpPost]
    public ActionResult SearchReport(string searchVal, string searchParam)
    {
        var reports = m_errandSvc.GetReportSearch(searchVal, searchParam).ToList();
        return Content( new JavaScriptSerializer().Serialize(reports), "application/json");
    }