如何在弹出编辑器中禁用某些列的编辑?

gre*_*man 9 gridview kendo-ui

ASP.Net MVC 3,Kendo UI Web,Kendo网格控件.

我将几个字段配置为只读:

.Model(model =>
      {
          model.Field(it => it.foobar).Editable(false);
          ...
Run Code Online (Sandbox Code Playgroud)

它在内联模式下按预期工作.但是当我将模式切换为弹出窗口时,编辑器会显示整个结构,因此我可以编辑我想要的任何字段(标记为不可编辑的字段).

那么如何标记它们以便弹出编辑器只显示标记为编辑的那些?

And*_*hov 7

Popup编辑器使用MVC的编辑器模板,它完全独立于Kendo的模板.如果要将该字段标记为只读,则需要在代码中的模型中附加元数据属性.例如:

public class MyClassUsedInGrid
{
    [System.ComponentModel.DataAnnotations.Editable(false)]
    public string foobar {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

更新:

道歉,答案原来是不完整的.你需要创建一个自定义模板来处理这个,因为内置的模板不支持它(我在我的项目中有这个并忘了它).为此,在/Views/Shared/EditorTemplates/string.cshtml下创建一个视图(我将在Razor中显示它,但很容易移植到aspx语法).

代码如下所示:

@model string
@if(ViewData.ModelMetadata.IsReadOnly){
    @Html.DisplayForModel()
}else{
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line" })
}
Run Code Online (Sandbox Code Playgroud)

这将正确处理可编辑元数据属性.当然这只是字符串,你应该为其他对象做类似的事情.如果您正在寻找其他内置模板的外观,请访问以下网站:http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates. HTML

性能旁注:如果您只在应用程序中的几个地方的某个地方执行此操作,则最好将其放在/ Views/YourView/EditorTemplates /下.原因是内置模板被编译到框架中并且通常会更快地工作.或者将它保留在Shared文件夹中,但将其命名为ExtendedString,然后在您查看标记属性中,您可以使用显式UI提示设置Editable,如下所示:

[System.ComponentModel.DataAnnotations.Editable(false)]
[System.ComponentModel.DataAnnotations.UIHint("ExtendedString")]
public string foobar {get;set;}
Run Code Online (Sandbox Code Playgroud)


Nik*_*tov 5

根据KendoUI文档(http://docs.telerik.com/kendo-ui/aspnet-mvc/validation),您应该使用[HiddenInput(DisplayValue = false)]

例:

[HiddenInput(DisplayValue = false)]
public int Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

经过测试和工作.