如何使用Kendo UI listview + ASP.NET MVC使数据模型上的一个字段可见并可编辑?

时间:2013-07-25 19:12:00

标签: asp.net-mvc kendo-ui kendo-asp.net-mvc

我有一个绑定到数据源的Kendo UI列表视图。有一个模型类,其中包含{Id,Name,Description,IsActive等字段)。我按照Kendo UI Listview演示并添加了编辑和删除图标以及相应的控制器。在edittemplate上,我只指定了Name字段,但是当我单击Edit时,我得到了Model上所有字段的文本框或其他控件。有没有办法指定要编辑的字段?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您需要做两件事,一件是功能性请求,另一件是从UX的角度请求。

  1. 确保在模型中将字段定义为不可编辑的
  2. 在模板中,不要将该字段显示为可编辑的输入。
  3. 如果您修改了KendoUI web中的示例,那么您将DataSource的Schema中的Model定义为:

    schema   : {
        model: {
            id    : "ProductID",
            fields: {
                ProductID   : { editable: false, nullable: true },
                ProductName : "ProductName",
                UnitPrice   : { type: "number" },
                Discontinued: { type: "boolean" },
                UnitsInStock: { type: "number" }
            }
        }
    }
    

    并且您希望ProductName变得不可编辑。然后你必须改为:

    schema   : {
        model: {
            id    : "ProductID",
            fields: {
                ProductID   : { editable: false, nullable: true },
                ProductName : { type: "string", editable: false },
                UnitPrice   : { type: "number" },
                Discontinued: { type: "boolean" },
                UnitsInStock: { type: "number" }
            }
        }
    }
    

    使用此功能,您可以编辑该值,但在更新时不会将其发送到服务器。但由于这不是 nice ,您应该使用更改模板来禁止更改它。

    他们目前的模板:

    <dt>Product Name</dt>
    <dd>
        <input type="text" class="k-textbox" 
               data-bind="value:ProductName" name="ProductName"
               required="required" validationMessage="required"/>
        <span data-for="ProductName" class="k-invalid-msg"></span>
    </dd>
    

    应更改为readonly并添加课程k-state-disabled

    <dt>Product Name</dt>
    <dd>
        <input type="text" readonly="readonly" class="k-textbox k-state-disabled" 
               data-bind="value:ProductName" name="ProductName"/>
    </dd>
    

    或直接更改input以获取其他内容(例如,跨度):

    <dt>Product Name</dt>
    <dd>
        <span data-bind="html:ProductName"></span>
    </dd>
    

    在此处运行示例http://jsfiddle.net/OnaBai/qh7SD/

答案 1 :(得分:0)

我对KendoUI一无所知,但我怀疑它会尊重数据注释。在此视图模型中添加类似的代码:

[MetadataType(typeof(YourModelValidation))]
public partial class YourModel
{
}

public class YourModelValidation 
{
    [ScaffoldColumn(false)]
    public int Id { get; set; }
}

这将阻止它在发生此类事件时自动搭建屏幕。很想知道它是否适用于剑道,所以请回复。