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

时间:2012-10-28 19:48:06

标签: gridview kendo-ui

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

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

.Model(model =>
      {
          model.Field(it => it.foobar).Editable(false);
          ...

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

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

3 个答案:

答案 0 :(得分:6)

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

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

<强>更新

道歉,答案原来是不完整的。你需要创建一个自定义模板来处理这个,因为内置的模板不支持它(我在我的项目中有这个并忘了它)。为此,在/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" })
}

这将正确处理可编辑的元数据属性。当然这只是字符串,你应该为其他对象做类似的事情。如果您正在寻找其他内置模板的内容,请查看此网站: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;}

答案 1 :(得分:5)

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

为该属性添加注释

示例:

[HiddenInput(DisplayValue = false)]
public int Id { get; set; }

经过测试和工作。

答案 2 :(得分:3)

类似,更简单但不太通用的解决方案是使用自定义编辑器模板:

column.Bound(a => a.foobar).EditorTemplateName("Empty");

然后在Views / Shared / EditorTemplates中放入“Empty.cshtml”,其中没有任何内容。