2014-10-02 63 views
0

我有一個Telerik網格如下(我是相對較新的MVC和全新的Telerik控件)。網格是從搜索條件列表中更新的部分視圖。從Telerik Grid發送數據到新標籤頁/按鈕點擊

@(Html.Kendo().Grid((IEnumerable<MyModel>)Model.MyModel) 
    .Name("grid") 
    .DataSource(ds => ds.Ajax() 
     .Model(mod => 
      { 
       mod.Id(m => m.Id); 
       mod.Field(p => p.Name).Editable(false); 
      })) 

    .Columns(columns => 
    { 
     columns.Template(@<text></text>).ClientTemplate("<input type='checkbox' #= IsSelected ? checked='checked':'' # class='chkbx' value='#= Id#' name='SelectedArea' />") 
       .HeaderTemplate("<input type='checkbox' id='masterCheckBox' onclick='checkAll(this)'/>").Width(20); 
     columns.Bound(p => p.Name).Filterable(false).Width(100); 
    }) 
          .Editable(ed => ed.Mode(GridEditMode.InCell)) 
          .Pageable() 
          .Sortable() 
          .Scrollable() 
          .Filterable() 
) 

的用戶需要能夠從與複選框電網進行選擇,然後點擊一個按鈕,應該彈出(新窗口/新標籤)與網格所選項目生成報告,只留下原始頁面。

如果我提交頁面,它會發送選定的列表,但會丟失網格的部分頁面(以及所有選定的項目。如果我只是創建一個鏈接並打開一個新頁面,它不會發布任何數據,所以我不知道哪些是被選中的,下面是我爲按鈕/動作所做的一些嘗試,我懷疑這比我發現的要簡單得多,但我無法通過樹看到森林...

<input type="submit" name="Command" value="Print Call List" formtarget="_blank" /> 
<input type="submit" name="Command" value="Print Call List" onclick="location.href='@Url.Action("CallList", "Reports", new { target="_blank" })'" /> 
@Html.ActionLink("Print Call List", "CallList", "Reports", null, new { target = "_blank" }) 

回答

0

終於想通了自己。

我仍然在提交表格就像點擊搜索按鈕。使用不同的按鈕,我確認要求什麼(搜索與打印列表),如果正在搜索,繼續執行之前的操作。如果請求的報告,然後我添加了一個標誌稱爲ShowCallList

 if (Request.IsAjaxRequest()) 
     { 
      if ("Print Call List" == command) 
      { 
       TempData.Add("SelectedArea", searchModel.SelectedArea); 
       searchModel.ShowCallList = true; 
      } 
      searchModel.SearchResults = ExecuteSearch(searchModel); 
      return PartialView("_SearchResults", searchModel); 
     } 

視圖對象,然後下面的代碼添加到視圖。

@if (Model.ShowCallList) 
{ 
    @Html.Raw("window.open('") @Url.Action("CallList", "Reports", new { target="_blank" }) @Html.Raw("')"); 
} 

它會打印出一個打開的窗口命令,並且URL有一個空白目標在新窗口中打開。我將所需的ID列表放入TempData中以將其傳遞到報告頁面。

因此,當搜索頁面重新加載時,報告將從TempData獲取所需的參數。我還必須對搜索方法進行小小的修改,以重新檢查搜索結果網格中的複選框,以便最終用戶看到只有使用請求的報告打開了新頁面。

   IsSelected = searchModel.SelectedArea.Contains(item.ID),