ASP.Net MVC 3,Kendo UI Web,Kendo网格控制。
我将几个字段配置为只读:
.Model(model =>
{
model.Field(it => it.foobar).Editable(false);
...
并且它在内联模式下按预期工作。但是当我将模式切换为弹出窗口时,编辑器显示整个结构,因此我可以编辑我想要的任何字段(标记为不可编辑的字段)。
那么如何标记它们以便弹出编辑器只显示标记为编辑的那些?
答案 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”,其中没有任何内容。