10

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

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

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

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

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

4

3 回答 3

8

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

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 提示设置可编辑,如下所示:

[System.ComponentModel.DataAnnotations.Editable(false)]
[System.ComponentModel.DataAnnotations.UIHint("ExtendedString")]
public string foobar {get;set;}
于 2012-10-29T00:52:02.583 回答
6

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

例子:

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

测试和工作。

于 2014-12-27T18:28:19.983 回答
4

A similar, simpler but less general solution is to use a custom Editor Template:

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

Then put "Empty.cshtml" in your Views/Shared/EditorTemplates with nothing in it.

于 2012-12-27T21:01:36.263 回答