Javascript 获取剑道窗口参数

Javascript 获取剑道窗口参数,javascript,kendo-grid,kendo-window,Javascript,Kendo Grid,Kendo Window,我有一个JavaScript方法可以打开一个剑道窗口,这个窗口包含一个剑道网格,其中有一个我想从我的控制器获取的数据源。为了获取填充此网格的数据,我需要传递一个ID。打开此窗口的JavaScript方法包含必要的数据,但是我不知道如何在剑道网格中获取此数据。我需要获得(read=>read.Action(“read_Action”,“ControlerName”,new{linenum=???})的ID部分,在该部分中我想用我的ID替换问号 JavaScript: function sh

我有一个JavaScript方法可以打开一个剑道窗口,这个窗口包含一个剑道网格,其中有一个我想从我的控制器获取的数据源。为了获取填充此网格的数据,我需要传递一个ID。打开此窗口的JavaScript方法包含必要的数据,但是我不知道如何在剑道网格中获取此数据。我需要获得
(read=>read.Action(“read_Action”,“ControlerName”,new{linenum=???})的ID
部分,在该部分中我想用我的ID替换问号

JavaScript:

    function showDetails(e) {
        e.preventDefault();
        var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
        console.log(dataItem.LineNum);
        var wnd = $("#Details").data("kendoWindow");
        wnd.center().open();
    }
剑道窗口:

@{Html.Kendo().Window().Name("Details")
    .Title("Location Details")
    .Visible(false)
    .Modal(true)
    .Draggable(true)
    .Width(800)
    .Height(600)
    .Content(                                
          Html.Kendo().Grid<TelerikMvcApp1.Models.BinLocationItemModel>()
               .Name("LocItemGrid")
               .DataSource(dataSource => dataSource
                    .Ajax()
                    .Model(model => model.Id(m => m.BinLocationItemId))
                    .Read(read => read.Action("Read_Action", "ControlerName", new { linenum = ??? })))
                    .ToHtmlString()).Render();
}
@{Html.Kendo().Window().Name(“详细信息”)
.标题(“位置详细信息”)
.可见(假)
.模态(真)
.Draggable(真)
.宽度(800)
.高度(600)
.内容(
Html.Kendo().Grid()
.Name(“LocItemGrid”)
.DataSource(DataSource=>DataSource
.Ajax()
.Model(Model=>Model.Id(m=>m.BinLocationItemId))
.Read(Read=>Read.Action(“Read_Action”,“ControlerName”,new{linenum=???})))
.ToHtmlString()).Render();
}

您只能使用控制器将窗口内容作为部分视图打开

设置控制器,该控制器将呈现局部视图,并将id添加到
ViewBag
以在剑道窗口中检索

public ActionResult GetKendoWindow(){
    ViewBag.Id = 123;
    return PartialView("_PartialView"); // Html file name
}
您的“\u PartialView”文件现在将只包含从
ViewBag.Id

Html.Kendo().Grid<TelerikMvcApp1.Models.BinLocationItemModel>()
               .Name("LocItemGrid")
               .DataSource(dataSource => dataSource
                    .Ajax()
                    .Model(model => model.Id(m => m.BinLocationItemId))
                    .Read(read => read.Action("Read_Action", "ControlerName", new { linenum = ViewBag.Id }))
如果您的ID来自父页面(打开窗口的页面),则需要将ID传递给控制器,然后您的
.LoadContentFrom(“GetKendoWindow”,“controller”)
将变成
.LoadContentFrom(“GetKendoWindow?ID=123”,“controller”)

您的控制器声明将成为
public ActionResult GetKendoWindow(int-ID)

编辑: 当您从JavaScript事件中检索值时,为了简单起见,您最好使用JavaScript打开窗口,在事件中放置以下内容

$("#Details").kendoWindow({
    width: "620px",
    height: "620px",
    title: "Window Title",
    content: {
       url: "GetKendoWindow",
       type: "GET",
       data: {ID : dataItem.ID}
    }
});
完全删除
Kendo().Window()
Razor函数,留下一个带有id详细信息的空div,然后使用
$(“#详细信息”).data(“kendoWindow”).center().open()打开窗口。

为简单起见,完整的代码:

<div id="Details"></div>

<script>
// Your event function where you retrieve the dataItem
$("#Details").kendoWindow({
    width: "620px",
    height: "620px",
    title: "Window Title",
    content: {
       url: "GetKendoWindow",
       type: "GET",
       data: {ID : dataItem.ID}
    }
});

$("#Details").data("kendoWindow").center().open()
//End the event function
</script>

您可以像这样使用
Kendo数据源附加数据

$("#grid").data("kendo-grid").dataSource.read({additional:"data"});
这正在网格演示页上运行:。它将param添加到请求中

您可能可以在dataSource中设置返回附加数据的函数-请参阅文档:

编辑1

您只需设置网格的附加请求数据即可实现这一点:

 $("#grid").data("kendo-grid").dataSource.transport.options.read.data = { additional: "data"};

因此,您可以使用剑道网格打开窗口。选择具有典型的
$(…).data(“剑道网格”)
的网格,然后将
数据源.transport.options.read.data
设置为您的行id。

我如何传递变量数据?例如
因为ID根据所选项目的不同而不同。@Alim也是这样,(“GetKendoWindow?ID=“+dataItem.ID”)只有dataItem.ID不存在于kendo窗口中,而只存在于打开它的javascript中。这就成功了,谢谢!我还有一个问题,因为我对JS比较陌生。
$(“#详细信息”)的部分。kendoWindow({
在编辑中,这是ajax,对吗?@Alim,不客气。在这个阶段不是ajax,您要做的是使用该函数为DOM元素定义一个剑道窗口,并在内容属性中定义ajax方法、url等。实际的ajax调用是在调用.open()时进行的在窗口上。问题是如何将数据从父页面传递到剑道窗口,而不是如何使用参数刷新网格。他希望使用传递的参数获取网格。我理解-您可以通过手动启动网格绑定或设置
dataSource.transport.options.read.data
(请参阅编辑的答案)来实现这一点。
$("#grid").data("kendo-grid").dataSource.read({additional:"data"});
 $("#grid").data("kendo-grid").dataSource.transport.options.read.data = { additional: "data"};