2014-10-02 71 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),