点击按钮将数据从Telerik Grid发送到新的选项卡/页面
本文关键字:选项 页面 按钮 数据 Grid Telerik | 更新日期: 2023-09-27 18:25:18
我有一个Telerik网格,如下所示(我对MVC相对陌生,对Telerik控件也很陌生)。网格是从搜索条件列表中更新的局部视图。
@(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" })
我终于想通了。
我仍然在提交表格,就像点击搜索按钮一样。使用另一个按钮,我验证所要求的内容(搜索与打印列表),如果是搜索,则继续执行以前的操作。如果请求了一个报告,那么我向视图对象添加了一个名为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),