当前位置: 首页 > 知识库问答 >
问题:

如何重用和参数化剑道UI网格编辑器模板(使用ASP MVC)?

葛鸿熙
2023-03-14

我已经创建了一个DropDownList编辑器模板网格内联编辑成功。现在我想在多个列(相同的网格)和/或具有不同网格的不同视图中重用此模板。

到目前为止,我发现如果我省略了模板中dropdown列表的“名称”,那么模板会自动绑定到网格中引用它的那一列(使用)。EditorTemplateName(...))。然而,还有其他东西应该参数化(显式或隐式)首先是下拉数据源。

问:在一个网格中有许多下拉列表,如何参数化下拉列表数据源以防止复制和粘贴DropDownListTemplate.cshtmlzillon时间?

问:一般来说,当在多个列和多个视图中使用时,我如何参数此模板?

观点:

@(Html.Kendo().Grid<Enumeration>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(e => e.Locale).Width(200)
            .EditorTemplateName("DropDownListTemplate");
        // columns.Bound(e => e.OtherColumn).Width(200)
        //    .EditorTemplateName("DropDownListTemplate", ???);

...以及名为DropDownListTemplate的模板。cshtml并放置在/Views/Shared/EditorTemplates中

@model string
@(Html.Kendo()
  .DropDownListFor(m => m)
  .BindTo(ViewBag.LocaleDropDownListDataSource) // <- Having many dropdown in one grid, how to parameterize this, without copy and paste the DropDownListTemplate.cshtml zillon times?
  //.OptionLabel("Select Locale")
  .DataValueField("Locale")
  .DataTextField("Value")
  //.Name("Locale") // Omitting this binds the template automatically to the referring column in the grid. Using a custom .Name, what is not a column name in the grid ruins the working
  )

共有2个答案

潘高洁
2023-03-14

迪翁的回答在外键(和类似)情况下确实是正确的,他解释了一个开箱即用的解决方案,所以我把它标记为答案。

尽管如此,如何参数化和编辑模板仍然是一个实际问题,需要回答。生成器中的EditorViewData()命名非常自我解释。(嗯,在你找到它之后…:-)

观点:

@(Html.Kendo().Grid<Enumeration>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(e => e.AnyColumn).Width(200)
            .EditorTemplateName("ReusableTemplate")
            .EditorViewData(new {AnyParameterName = anyValue1, OtherParameterName = otherValue1});
        columns.Bound(e => e.OtherColumn).Width(200)
            .EditorTemplateName("ReusableTemplate")
            .EditorViewData(new {AnyParameterName = anyValue2, OtherParameterName = otherValue2});

...这个模板叫做ReusableTemplate。cshtml并放置在/Views/Shared/EditorTemplates中

@model object

@{
    // Access the actual parameter values anywhere including the kendo helpers below (if any) via ViewData:
    var any = ViewData.AnyParameterName
    var other = ViewData.OtherParameterName
}

@(Html.Kendo()
  .AnyHelperYouWant_or_NoHelperAtAll
  )

例如:

@(Html.Kendo().Grid<Enumeration>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(e => e.AnyColumn).Width(200)
            .EditorTemplateName("ReusableTemplate")
            .EditorViewData(new {Name = "list1");
        columns.Bound(e => e.OtherColumn).Width(200)
            .EditorTemplateName("ReusableTemplate")
            .EditorViewData(new {Name = "list2"});

并使用它:

@model object

@{
    // Access the actual parameter values:
    // Note: You can inline this variable if you want
    var name = ViewData.Name;
}


@(Html.Kendo().DropDownListFor(m => m).BindTo((SelectList)ViewData[name])
程胡非
2023-03-14

为什么你要重新发明轮子,剑道已经为我们提供了GridForeignKey列被使用无数次。

模板代码

@model object

@(Html.Kendo().DropDownListFor(m => m)        
      .BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"])
)

网格中的实现

columns.ForeignKey(col => col.DepartmentId, (IEnumerable) ViewBag.Departments, "Value", "Text").Title("Department");

演示

 类似资料:
  • 我使用Telerik的演示页面上显示的编辑网格。编辑网格后,我希望网格刷新。编辑网格后,网格是否有调用的任何事件? 我试图使用数据绑定事件。在本例中,我读取数据源,但它告诉我刷新网格是一个无限循环。我试图使用saveChanges事件,但它不起作用。

  • 嗨,我正在尝试做剑道网格,但它不工作,显示网格,但没有显示数据。我不知道怎么了。我不知道parametersMap是怎么工作的。请帮帮我。 控制器 这是剧本 Json数据返回:http://localhost:53232/Home/GetGeo?id=5

  • 我想在我的剑道ui网格中进行内联编辑。数据绑定似乎工作正常,但当我在编辑某些内容后单击“更新”按钮时,范围会得到更新,但编辑对话框不会消失。如果单击另一个编辑按钮,它将进入失效状态。毕竟,只有当我至少提供一个伪函数作为k-save时,它才会更新作用域。出于某种原因,单击“取消”按钮确实会更新范围。所以“取消”按钮实现了我对“更新”按钮的期望。 您可能会看到,我想更新客户端的本地范围,而不是向任何服

  • 我无法编辑剑道网格内联和弹出两者。单击“保存”按钮时,我的操作方法无法获取当前编辑单元格的值。 控制器代码: 在控制器中,我只得到空值。请帮帮我,我想使用剑道mvvm教学。

  • 我的项目中有剑道网格 其中一个圆柱,例如Naam圆柱,看起来像这样 它所做的是在弹出窗口中打开一个剑道编辑器,其中包含产品的价值。纳姆 弹出窗口有剑道编辑器、OK和Cancel按钮 这是我的网格图像。带3个点的圆圈是打开剑道编辑器的按钮 这是我的剑道编辑器弹出窗口的图片,文本已经编辑过了 到现在为止,一直都还不错。我在编辑器中获得Naam值。 当我点击OK时,我会打电话给你 它还没有完成; 这就是

  • 我在剑道网格上使用事件来显示几个隐藏的列。然后,我将在事件中再次隐藏它们。 我的问题是,似乎没有取消编辑模式的事件,所以如果用户单击取消,列会被搞砸。 是否有未记录的事件需要取消,还是需要找到解决方案?