用 Kendo MVC 项目替换 Kendo Dialog 的内容?

弗雷德里克·T

我有这个 kendo mvc ui 项目:

@(Html.Kendo().Dialog()
  .Name("Details")
  .Title(GetText("menutreeselectionbutton", "Role/ManageRoleTemplates"))
  .Content(
      Html.Kendo().TreeView()
          .Name("menuTreeView")
          .TemplateId("treeview-template")
          .LoadOnDemand(false)
          .AutoScroll(true)
          .DataSource(source =>
          {
              source.Model(model => model.Id("MenuItemId")
                  .HasChildren("HasChildren"))
              .Read(read => read.Action("_GetMenuItems", "Role").Data("GetRoleIdFromHiddenField"))
              .Events(e => e.RequestEnd("requestEndHandler"));
          })
          .ToHtmlString()
    )
  .Visible(false)
  .Modal(true)
  .Width(400)
  .Actions(actions =>
  {
      actions.Add().Text(GetText(Constant.CANCEL, Constant.TEXT_GLOBAL));
      actions.Add().Text(GetText(Constant.SAVE, Constant.TEXT_GLOBAL)).Primary(true).Action("saveMenuTreeSelection");
  }))

这个想法是有一个包含一些信息的网格,您可以单击每个条目的按钮,打开一个带有树视图的对话框,您可以在那里进行一些选择。

问题是,这个 treeview 是在页面加载时加载的,这会花费大量不必要的后端访问。当您关闭对话框并为网格中的另一个条目打开它时也会出现问题,因为显示了上一个选择的树视图,同时获取了新数据以便可以重新加载。

所以我只想在对话框打开时加载树视图(或渲染它),并在关闭时再次“清除”它。

关于如何解决这个问题的任何想法?

我试图用 javascript 替换读取操作,但我无法让它工作。我也尝试像这样替换内容(这里稍微修改,以提高可读性):

$("#Details").data("kendoDialog").content("@(Html.Kendo().TreeView()
        .Name("menuTreeView")
          .TemplateId("treeview-template")
          .LoadOnDemand(false)
          .AutoScroll(true)
          .DataSource(source =>
          {
              source.Model(model => model.Id("MenuItemId")
                  .HasChildren("HasChildren"))
              .Read(read => read.Action("_GetMenuItems", "Role").Data("GetRoleIdFromHiddenField"))
              .Events(e => e.RequestEnd("requestEndHandler"));
          })
          .ToHtmlString().Replace(Environment.NewLine, ""))");

这“有效”,但它不呈现,只显示原始 html 代码,如下所示: 从javascript设置内容后对话框的内容

我很茫然。它按原样工作正常,但根本不是最佳的。

弗雷德里克·T

想出了我自己的解决方案。我只会为任何解决类似问题并寻求帮助的人添加这个。这是对话框的代码:

@(Html.Kendo().Dialog()
  .Name("Details")
  .Title(GetText("menutreeselectionbutton", "Role/ManageRoleTemplates"))
  .Content(string.Empty)
  .Visible(false)
  .Modal(true)
  .Width(400)
  .Actions(actions =>
  {
      actions.Add().Text(GetText(Constant.CANCEL, Constant.TEXT_GLOBAL));
      actions.Add().Text(GetText(Constant.SAVE, Constant.TEXT_GLOBAL)).Primary(true).Action("saveMenuTreeSelection");
  })
  .Events(e => e
    .Hide("onDialogHide")))

那里没有什么异常。当用户单击显示对话框的按钮时,在网格中调用一个函数,我将树视图注入到对话框中,然后打开对话框,以下是我如何将生成的树视图代码保存为 javascript 中的字符串并将其注入对话框中(注意,为了便于阅读,上述方法中的周围代码已被删除):

$("#Details").data("kendoDialog").content('@Html.Raw(HttpUtility.JavaScriptStringEncode(Html.Kendo().TreeView()
                    .Name("menuTreeView")
                    .TemplateId("treeview-template")
                    .LoadOnDemand(false)
                    .AutoScroll(true)
                    .DataSource(source =>
                    {
                        source.Model(model => model.Id("MenuItemId")
                            .HasChildren("HasChildren"))
                        .Read(read => read.Action("_GetMenuItems", "Role").Data("GetRoleIdFromHiddenField"))
                        .Events(e => e.RequestEnd("requestEndHandler"));
                    })
                    .ToString()))');

请注意我如何使用 Razor(或 MVC)的帮助程序对来自 Kendo 的输出进行编码,还将“ToHtmlString”更改为“ToString”。

为了确保我不会因为一遍又一遍地替换树视图而遇到麻烦,我在对话框中添加了一个事件,在对话框关闭时清理树视图:

function onDialogHide(e) {
    $("#menuTreeView").data("kendoTreeView").destroy();
    $("#menuTreeView").remove();
}

选择“隐藏”事件是因为这是对话框关闭时触发的最后一个事件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用Bootstrap样式化Kendo Window的内容

来自分类Dev

替换Kendo ObservableArray的内容而不触发事件

来自分类Dev

Kendo UI窗口(内容)

来自分类Dev

用Linq过滤Kendo Grid ASP.NET MVC

来自分类Dev

MVC Kendo网格样式

来自分类Dev

Kendo TabStrip中的Kendo MVC网格

来自分类Dev

Kendo Scheduler mvc双击以显示kendo窗口

来自分类Dev

MVC Kendo组合框所选项目的价值?

来自分类Dev

Kendo DropDownList与Kendo Grid的默认项目绑定

来自分类Dev

Kendo DropDownList与Kendo Grid的默认项目绑定

来自分类Dev

用gulp构建kendo ui

来自分类Dev

用requirejs注入kendo ui

来自分类Dev

用gulp构建kendo ui

来自分类Dev

Kendo MVC上传-批量上传

来自分类Dev

MVC5 视图和 Kendo Splitter - 2 中的内容覆盖 1

来自分类Dev

带有Kendo窗口的Kendo UI MVC网格-500错误

来自分类Dev

Kendo DropDownList模板与空白项目

来自分类Dev

Kendo UI窗口-防止加载以前的内容

来自分类Dev

如何更改Kendo Excel按钮内容文本

来自分类Dev

如何更改Kendo Excel按钮内容文本

来自分类Dev

将Kendo Grid选定的项目传递到Kendo窗口中

来自分类Dev

将Kendo Grid选定的项目传递到Kendo窗口中

来自分类Dev

无法用数据填充Kendo Scheduler

来自分类Dev

用分组数据过滤Kendo UI listView

来自分类Dev

用分组数据过滤Kendo UI listView

来自分类Dev

将Kendo UI添加到现有的MVC 4项目

来自分类Dev

MVC Kendo下拉菜单读取/获取具有表和视图之间的联接的项目

来自分类Dev

尝试添加或编辑项目时,Kendo UI ASP.NET MVC ListView失败

来自分类Dev

如何使用Kendo Asp Mvc在另一台PC中使用git克隆的项目