Kendo Grid Edit Bootstrap 类和 Textbox 自动对焦与 EditorTemplate 不起作用

Posted

技术标签:

【中文标题】Kendo Grid Edit Bootstrap 类和 Textbox 自动对焦与 EditorTemplate 不起作用【英文标题】:Kendo Grid Edit Bootstrap class and Textbox autofocus with EditorTemplate not working 【发布时间】:2017-05-20 19:23:31 【问题描述】:

我一直在为 asp.net MVC 使用剑道网格。

我面临的两个问题

1 - 在为用户显示创建视图时,我将自动对焦属性设置为第一个文本框。在没有剑道的情况下使用时,自动对焦可以正常工作并被注入 Dom。但是在使用 kendo 和 editortemplate 时,我看不到自动对焦属性被插入。

2 - 同样在剑道网格 Ajax 编辑中,单击编辑链接按钮时,我无法看到文本框的引导样式。

以下是代码

索引视图中的剑道网格

@(html.Kendo().Grid(Model)
.Name("Grid")
.Columns(columns =>

    columns.Bound(u => u.USERNAME);
    columns.Bound(u => u.PASSWORD);
    columns.Bound(u => u.ROLE);
    columns.Bound(u => u.STATUS);
    columns.Command(command =>  command.Edit(); command.Destroy(); ).Width(250);

)
.Pageable()
.DataSource(datasource => datasource
    .Ajax()
    .Model(model => model.Id(u => u.ID))
    .Update(update => update.Action("Edit", "Users"))
    .Destroy(destroy => destroy.Action("Delete", "Users"))
)

)

为我遇到的第一个问题的用户创建视图用户名片段

<div class="form-group">
        @Html.LabelFor(model => model.USERNAME, htmlAttributes: new  @class = "control-label col-md-2" )
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.USERNAME,  new  @autofocus = "autofocus", @class = "form-control"  )
            @Html.ValidationMessageFor(model => model.USERNAME, "", new  @class = "text-danger" )
        </div>
    </div>

您可以看到我已将 autofocus 放在创建视图中,但在使用 Kendo 时我无法看到页面加载的焦点。如果我删除 Kendo 和 EditorTemplate,自动对焦可以正常工作。

我添加了代码和更多细节。请看一下。基本上我面临两个问题,如果我使用剑道,我无法在 Create.cshtml 中为 USERNAME 文本框获得自动对焦。第二在 Kendo Grid Edit 中,除非我在文件夹中应用 EditorTemplate,否则我无法在编辑模式下看到引导类应用于文本框。如果我应用编辑器模板,我无法在 create.cshtml 上获得自动对焦。

【问题讨论】:

【参考方案1】:

对于您的第一个问题,autofocus 属性标识页面加载时应该具有焦点的输入。但是当用户单击一行上的编辑按钮时,剑道网格编辑器弹出窗口会动态添加到页面中。因此,您应该在网格编辑事件上使用 javascript 代码手动设置焦点。因此,在您的网格设置中:

.Events(events => events.Edit("gridEdit"))

这是我通常放在我的 gridEdit 事件处理程序中的代码:

function gridEdit(e) 
    // get the handle of the edit window
    var wnd = e.container.data("kendoWindow");
    // set focus to the first input
    wnd.bind('activate', function () 
        e.container.find(':input:visible:enabled:first').focus();
    );

当内部元素准备好时,我们需要将焦点设置在编辑窗口激活上。我的代码将焦点设置为第一个启用的可见输入元素,但您的逻辑可能不同。

我不清楚您的第二个问题,但也许您应该为此提出一个新问题,并请提供更多详细信息,例如问题的快照图像。

【讨论】:

以上是关于Kendo Grid Edit Bootstrap 类和 Textbox 自动对焦与 EditorTemplate 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

设置 Kendo UI Grid Popup (MVC) 的宽度

Kendo Grid:禁用行编辑

Kendo UI Bootstrap 主题无法与 Bootstrap 3.1.0 配合使用

如何在 kendo.ui.grid 中创建自定义 kendo.ui.Window 以进行编辑

Kendo grid getKendoGrid无法使用扩展的kendo网格

在 ng-template 中使用 kendo-grid-column 的格式属性?