通过单击按钮将数据从Telerik Grid发送到新选项卡/页面

时间:2014-10-02 14:11:25

标签: javascript c# redirect telerik asp.net-mvc-5

我有一个如下所示的Telerik Grid(我对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" })

1 个答案:

答案 0 :(得分: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),