使用Kendo菜单打开多个窗口

我有一个剑道菜单,我想要每个菜单打开一个新窗口。 我怎样才能做到这一点?

这是我在_layout当前代码:

 
@(Html.Kendo().Menu() .Name("menu") .Items(items => { items.Add().Text("Menu 1").Items(child => { child.Add().Text("1").LinkHtmlAttributes(new { onClick = "menu('1');" }); child.Add().Text("2"); }); }) )
function menu(text) { var window = $("#win1").data("kendoWindow"); switch (text) { case "1": window.refresh({ url: "@Url.Action("Index", "1")" }).title("1"); break; case "2": window.refresh({ url: "@Url.Action("Index", "2")" }).title("2"); break; } window.open(); }

我在索引中创建了这个默认窗口:

 @(Html.Kendo().Window() .Name("win1") .Title("default") .LoadContentFrom("Index", "default") .Draggable() .Resizable() .Actions(actions => actions.Close().Minimize().Refresh()) .Position(p => p.Top(100)) ) 

我对这段代码有两个问题:

  1. 我想拥有多个窗口。
  2. 窗口的刷新按钮加载上一页的旧内容。

要拥有多个窗口,您可以创建一个部分视图,将其注入HTML代码( @Html.Partial("MyGenericWindow") ),确保每次都生成一个新的窗口ID(名称)。

像这样:

 @{ var windowId = Guid.NewGuid().ToString(); } @(Html.Kendo().Window() .Name(windowId ) .Draggable() .Resizable() .Actions(actions => actions.Close().Minimize().Refresh()) .Position(p => p.Top(100)) ) 

要解决刷新问题,请尝试以下操作:

 function menu(text) { var window = $("#@windowId").data("kendoWindow"); window.title(text); window.refresh({ url: '@Url.Action("Index")', data: { myParam: text } }); window.bind("refresh", function () { window.center(); window.open(); }); } 

嗯,这是我的最终解决方案。 🙂

_Layout JS脚本:

  

Home控制器的win行动:

 public ActionResult win(string window) { WindowViewModel model = new WindowViewModel(); model.Name = window; switch (window) { case "1": default: model.Title = "1"; model.Url = Url.Action("Index", "1"); break; case "2": model.Title = "2"; model.Url = Url.Action("Index", "2"); break; } return PartialView("GenericWindow", model); } 

我的GenericWindow PartialView:

 @model WindowViewModel @(Html.Kendo().Window() .Name(Model.Name) .Draggable() .Actions(actions => actions.Close().Minimize().Refresh()).LoadContentFrom(Model.Url) .Title(Model.Title) ) 

WindowViewModel

 public class WindowViewModel { public string Title { get; set; } public string Url { get; set; } public string Name { get; set; } }