【问题标题】:ASP.NET MVC Telerik Grid: How to make one column read only on edit?ASP.NET MVC Telerik Grid:如何使一列在编辑时只读?
【发布时间】:2014-12-10 23:34:03
【问题描述】:

我有一个 ASP.NET MVC Telerik Grid(不是 Kendo)。我有一个有两列的网格。第一列是我可以从中选择的项目的下拉列表,第二列只是一个可编辑的文本框。

我想在编辑时将第一列设置为只读,这意味着我只能编辑第二列而不能编辑第一列。我将第一列设置为只读模型(模型类中的 [ReadOnly] 标记)和视图(即 Editable(false))。

当我这样做时,我不能像我想要的那样在编辑模式下编辑第一列。但是,当我插入/创建新记录时……第一列是空白的,我只能为第二列输入值。

我已经尝试了所有方法并环顾四周,但找不到解决方案。

【问题讨论】:

  • 你不能添加一些 javascript 使其只读
  • 如何将选择列表设为只读?有一些 AJAX 正在进行,我不太适应。当我点击“编辑”时,会出现 SelectList,否则,我只能查看两个文本区域。
  • 您介意显示一些代码或屏幕截图吗??
  • 两列都可编辑:i.imgur.com/Nrqw8PI.png;第一列只读为编辑模式:i.imgur.com/D8FHGTl.png;第一列只读用于创建新记录:imgur.com/kjjN6UK(请注意我如何将第一列的空白区域设置为只读)
  • stackoverflow.com/questions/7823680/… ...这是在正确的轨道上,但它不适合我。当我点击编辑时,第一列变成一个下拉框。如何防止或阻止这种情况...并使其只读?

标签: asp.net-mvc user-interface telerik telerik-grid telerik-mvc


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

    我在文本字段中遇到了类似的问题。我通过挂钩 Edit 事件解决了这个问题。

    @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 可能会有所不同,但我怀疑解决方案会相似。

    【讨论】:

      【解决方案3】:

      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>
      

      所以通过上面的使用,当进入编辑模式时,该项目仍然是只读的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        • 2011-01-19
        • 1970-01-01
        • 2011-11-04
        • 1970-01-01
        相关资源
        最近更新 更多