Javascript 获取剑道窗口参数
我有一个JavaScript方法可以打开一个剑道窗口,这个窗口包含一个剑道网格,其中有一个我想从我的控制器获取的数据源。为了获取填充此网格的数据,我需要传递一个ID。打开此窗口的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
(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"};