C# 将ViewModel传递给视图两次

C# 将ViewModel传递给视图两次,c#,asp.net,razor,C#,Asp.net,Razor,我的homecontroller中有以下索引方法: var homeIndexModel = new HomeIndexModel() { ActiveTasks = tasks.Where( task => task.TaskStatus != TaskStatusEnum.Deferred && task.TaskStatus != TaskStatu

我的homecontroller中有以下索引方法:

    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);
  [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>

在搜索时再次传回视图模型,然后以这种方式将报告分配给它

 [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
           });

        })

当然,它不会进入循环,因为
Model.Reports
在您的操作中为空,但在我搜索之后?我希望它进入后,我的搜索。请描述您的项目structure@Anonymous:你的意思是什么?报表对象类型是什么?不确定是什么原因导致你的应用程序关闭,但为什么不使用ajax进行此类实现?我使用jQuery发布到SearchReport操作。我应该如何使用Ajax返回数据并在视图中查看报告?您能用使用的jquery代码更新您的问题吗?谢谢。在这里使用部分视图怎么样?这不起作用,因为报表是一个列表,而内容需要字符串。
 [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({
            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
           });

        })
[HttpPost]
    public ActionResult SearchReport(string searchVal, string searchParam)
    {
        var reports = m_errandSvc.GetReportSearch(searchVal, searchParam).ToList();

        return Content( new JavaScriptSerializer().Serialize(reports), "application/json");
    }