C# 尝试添加或编辑项目时,Kendo UI ASP.NET MVC ListView失败

C# 尝试添加或编辑项目时,Kendo UI ASP.NET MVC ListView失败,c#,asp.net-mvc,listview,razor,kendo-ui,C#,Asp.net Mvc,Listview,Razor,Kendo Ui,我正在努力建立一个ListView,它允许我添加新记录和更新现有记录。加载列表中的项目就像一个符咒。同时显示唯一相关的信息Id和行也非常有效 两个问题: 1.向列表中添加一个新项:我看到了丑陋的表单,它允许设置Id和Line的值。但是我没有办法保存它。 2.更新现有项:我看到丑陋的表单,它允许设置Id和行的值。但是田野是空的。它们应该预先填充之前显示的内容。再说一次,我没有办法挽救它 我的代码看起来非常类似于Telerik的示例项目中提供的代码。不幸的是,我找不到细微的区别 ListView极度

我正在努力建立一个ListView,它允许我添加新记录和更新现有记录。加载列表中的项目就像一个符咒。同时显示唯一相关的信息
Id
也非常有效

两个问题:
1.向列表中添加一个新项:我看到了丑陋的表单,它允许设置
Id
Line
的值。但是我没有办法保存它。
2.更新现有项:我看到丑陋的表单,它允许设置
Id
行的值。但是田野是空的。它们应该预先填充之前显示的内容。再说一次,我没有办法挽救它

我的代码看起来非常类似于Telerik的示例项目中提供的代码。不幸的是,我找不到细微的区别

ListView极度精简的代码(仍无法按预期工作):

@使用System.Collections
@使用TestcaseRepositoryAPI.Model.Domain;
@模型模板生成项
@{
ViewBag.Title=“VORLAGE”;
ViewBag.SubTitle=“erstellen”;
ViewBag.ShowMenu=true;
Layout=“~/Views/Shared/\u LayoutMetro.cshtml”;
}
@Html.Partial(“_MetroPageHeader”)
@(Html.Kendo().ListView(Model.Records)
.名称(“记录列表”)
.ClientTemplateId(“recordLinesTemplate”)
.DataSource(d=>d
.Events(e=>e.RequestStart(“RequestStart”).RequestEnd(“RequestEnd”))
.Create(“RecordLineCreate”、“Metro”)
.Read(“RecordLinesRead”、“Metro”)
.Update(“RecordLineUpdate”、“Metro”)
.Destroy(“RecordLineDelete”、“Metro”)
.Model(m=>m.Id(o=>o.Line))
)
.可编辑()
//.Events(e=>e.Remove(“removeRecord”))
.HtmlAttributes(新的{style=“border:none;”})
.TagName(“div”)
)
泽勒线#
身份证件
#:Id#
函数请求启动(e){
log(“requestStart(e)”,e);
}
函数requestEnd(e){
日志(“requestEnd(e)”,e);
console.log(“e.type”,e.type);
如果(如回应){
console.log(“e.response”,e.response);
}
}
函数getRecList(){
返回$(“#记录列表”).data(“kendoListView”);
}
$(“.k-添加按钮”)。单击(函数(e){
getRecList().add();
e、 预防默认值();
});
返回数据的控制器的代码段:

public JsonResult RecordLinesRead([DataSourceRequest]DataSourceRequest请求)
{
列表记录=GetTemplateGeneratorItemFromSession()。记录;
内线=1;
foreach(TemplateGeneratorItem.Record记录中的记录)
{
record.Line=Line++;
}
返回Json(records.ToTreeDataSourceResult(request),JsonRequestBehavior.AllowGet);
}
最后是模型的类别:

命名空间TestcaseRepositoryAPI.Model.Domain
{
[数据合同]
公共类TemplateGeneratorItem
{
[数据成员]
公共列表记录{get;set;}
公开课记录
{
[数据成员]
//[脚手架立柱(假)]
公共整数行{get;set;}
[数据成员]
公共字符串Id{get;set;}
[数据成员]
[脚手架立柱(假)]
公共列表字段{get;set;}
公共记录(){}
公共记录(记录)
{
行=记录行;
Id=record.Id;
字段=记录字段;
}
}
公共类记录字段
{
[数据成员]
公共字符串名称{get;set;}
...
}
}
}

找到了它。Telerik的支持人员提出了正确的问题

问题很简单:没有指定编辑器模板!有(至少?)两种方法可以解决此问题:
1.指定编辑器模板的名称(例如
.Editable(e=>e.Editable(true).TemplateName(“TemplateGeneratorRecord”))
)并在EditorTemplates文件夹中创建TemplateGeneratorRecord.cshtml。
2.或者在EditorTemplates文件夹中创建一个名为Record.cshtml的编辑器模板,让奇迹发生。这就是Telerik示例中使用的解决方案

我选择了第一个选项。现在,它正在按预期工作

@using System.Collections
@using TestcaseRepositoryAPI.Model.Domain;

@model TemplateGeneratorItem

@{
    ViewBag.Title = "VORLAGE";
    ViewBag.SubTitle = "erstellen";
    ViewBag.ShowMenu = true;
    Layout = "~/Views/Shared/_LayoutMetro.cshtml";
}

@Html.Partial("_MetroPageHeader")

<div class="demo-section">
    <a class="k-button k-button-icontext k-add-button" href="#"><span class="k-icon k-add"></span>Add new record</a>
</div>

<div class="demo-section k-header">
    @(Html.Kendo().ListView<TemplateGeneratorItem.Record>(Model.Records)
        .Name("RecordsList")
        .ClientTemplateId("recordLinesTemplate")
        .DataSource(d => d
            .Events(e => e.RequestStart("requestStart").RequestEnd("requestEnd"))
            .Create("RecordLineCreate", "Metro")
            .Read("RecordLinesRead", "Metro")
            .Update("RecordLineUpdate", "Metro")
            .Destroy("RecordLineDelete", "Metro")
            .Model(m => m.Id(o => o.Line))
        )
        .Editable()
        //.Events(e => e.Remove("removeRecord"))
        .HtmlAttributes(new { style = "border:none;" })
        .TagName("div")
    )
</div>

<script type="text/x-kendo-tmpl" id="recordLinesTemplate">
    <div class="k-widget" style="margin:10px auto 10px auto;">
        <fieldset>
            <legend>Zeile #=Line#</legend>

            <div class="edit-buttons">
                <a class="k-button k-button-icontext k-edit-button" href="\\#"><span class="k-icon k-edit"></span></a>
                <a class="k-button k-button-icontext k-delete-button" href="\\#"><span class="k-icon k-delete"></span></a>
            </div>

            <dl>
                <dt>ID</dt>
                <dd>#:Id#</dd>
            </dl>
        </fieldset>
    </div>
</script>

<script type="text/javascript">
    function requestStart(e) {
        console.log("requestStart(e)", e);
    }

    function requestEnd(e) {
        console.log("requestEnd(e)", e);
        console.log("e.type", e.type);
        if (e.response) {
            console.log("e.response", e.response);
        }
    }

    function getRecList() {
        return $("#RecordsList").data("kendoListView");
    }

    $(".k-add-button").click(function (e) {
        getRecList().add();
        e.preventDefault();
    });
</script>
public JsonResult RecordLinesRead([DataSourceRequest] DataSourceRequest request)
{
    List<TemplateGeneratorItem.Record> records = GetTemplateGeneratorItemFromSession().Records;
    int line = 1;
    foreach (TemplateGeneratorItem.Record record in records)
    {
        record.Line = line++;
    }

    return Json(records.ToTreeDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
namespace TestcaseRepositoryAPI.Model.Domain
{
    [DataContract]
    public class TemplateGeneratorItem
    {
        [DataMember]
        public List<Record> Records { get; set; }

        public class Record
        {
            [DataMember]
            //[ScaffoldColumn(false)]
            public int Line { get; set; }

            [DataMember]
            public string Id { get; set; }

            [DataMember]
            [ScaffoldColumn(false)]
            public List<RecordField> Fields { get; set; }

            public Record() { }

            public Record(Record record)
            {
                Line = record.Line;
                Id = record.Id;
                Fields = record.Fields;
            }
        }

        public class RecordField
        {
            [DataMember]
            public string Name { get; set; }

            ...
        }
    }
}