ASP.Net MVC 3,Kendo UI Web,Kendo网格控件.
我将几个字段配置为只读:
.Model(model =>
{
model.Field(it => it.foobar).Editable(false);
...
Run Code Online (Sandbox Code Playgroud)
它在内联模式下按预期工作.但是当我将模式切换为弹出窗口时,编辑器会显示整个结构,因此我可以编辑我想要的任何字段(标记为不可编辑的字段).
那么如何标记它们以便弹出编辑器只显示标记为编辑的那些?
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)
根据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)
经过测试和工作.
| 归档时间: |
|
| 查看次数: |
8377 次 |
| 最近记录: |