我有一个ASP.NET MVC Telerik Grid(不是Kendo)。我有一个有两列的网格。第一列是我可以选择的项目的下拉列表,第二列只是一个可编辑的文本框。
我想在编辑时将第一列设置为READ ONLY,这意味着我只能编辑第二列而不能编辑第一列。我将第一列设置为只读取模型(模型类中的[ReadOnly]标签)和视图(即可编辑(假))。
当我这样做时,我不允许像我想要的那样在编辑模式下编辑第一列。但是,当我去插入/创建一个新记录时......第一列是空白的,我只能输入第二列的值。
我已经尝试了一切并环顾四周,但无法找到解决方案。
答案 0 :(得分:6)
试试这个:
model.Field(p => p.Name).Editable(false)
示例:
@(Html.Kendo().Grid<OrderViewModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.Id).Sortable(false).Visible(false);
columns.Bound(p => p.Name);
columns.Bound(p => p.Notes);
columns.Command(command => { command.Edit(); }).Width(172);
})
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.HtmlAttributes(new { style = "height:550px;" })
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Read(read => read.Action("Orders_Read", "Grid"))
.Model(model => {
model.Id(p => p.Id);
model.Field(p => p.Name).Editable(false);
})
.Update(update => update.Action("EditingInline_Update", "Grid"))
)
)
参考:http://docs.telerik.com/kendo-ui/aspnet-mvc/helpers/grid/configuration#model
答案 1 :(得分:2)
我在文本字段中遇到了类似的问题。我通过挂钩编辑事件解决了这个问题。
@Html.Kendo().Grid<MyViewModel>()...Events(e => e.Edit("onGridEdit"))
<script type="text/javascript">
function onGridEdit(e) {
if (!e.model.isNew())
e.container.find('input#ID').prop('disabled', true);
}
</script>
在这个例子中,我希望我的ID字段在创建后不可更改。你的里程和jQuery可能会有所不同,但我怀疑解决方案是类似的。
答案 2 :(得分:-1)
TL; DR;
如果使用的是网格模板列,请按如下所示将EditItemTemplate保留为空:
<telerik:GridTemplateColumn DataField="opt_id" UniqueName="opt_id" DataType="System.Int32">
<ItemTemplate>
<telerik:RadLabel Text='<%# DataBinder.Eval(Container.DataItem, "opt_id") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate></EditItemTemplate>
</telerik:GridTemplateColumn>
因此,通过使用上述内容,进入编辑模式后,该项目仍将是只读的。