2016-02-25 23 views
0

我有以下的索引方法在我的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); 

這homeIndexModel傳遞給視圖當您訪問的第一頁。正如你所看到的,我將一個Report-object賦值爲null。

我想在使用homeedexModel時使用此報告屬性當我做一個搜索在第一頁。當我點擊「搜索」時,應該會出現一個模式並顯示搜索結果。

這裏是我的搜索方法控制器:

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

正如你所看到的,我assaign報告屬性與GetReportSearch的結果。我想通過循環低於這個對象:

<!-- 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); 
     }); 
    }); 
+0

當然,它不會進入循環,因爲'Model.Reports'在你的行動中爲空 – Imad

+0

但是我的搜索?我希望它在我搜索後進入。 – Bryan

+0

親切描述你的項目結構 – Imad

回答

0

再次回傳視圖模型上的搜索,然後將報告分配給它這種方式。

​​

或者最好的做法是你可以做一個Ajax調用,然後只獲取報告數據並更新你的View頁面。但這需要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"); 
    } 
+0

這是行不通的。在我看來導致我的應用程序關閉.. – Bryan

+0

不知道是什麼導致您的應用程序關閉,但爲什麼不使用Ajax這種實現? –

+0

我使用jQuery發佈到SearchReport-操作。我應該如何返回數據並在Ajax視圖中查看報告? – Bryan