2015-06-17 28 views
0

我正努力設置一個ListView,它允許我添加新記錄並更新現有記錄。加載列表中的項目就像一個魅力。同時只顯示相關信息IdLine完美。Kendo UI嘗試添加或編輯項目時,ASP.NET MVC ListView失敗

兩個問題:
1.添加新項列表:我看到醜陋的形式,允許設置IdLine值。但是我無法保存它。
2.更新現有項目:我看到一個醜陋的表格,它允許設置IdLine的值。但是這些字段是空的。他們應該預先填充以前顯示的任何內容。再一次,我無法保存它。

我的代碼看起來很像Telerik的示例項目中提供的代碼。不幸的是,我無法找到微小的差別......

ListView中的極剝離代碼(仍然沒有發揮預期):

@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; } 

      ... 
     } 
    } 
} 

回答

0

找到它。 Telerik的支持人員提出了正確的問題。

問題很簡單:沒有指定編輯器模板!有(至少?)兩種方式來解決這個問題:
1.指定編輯模板(例如.Editable(e => e.Editable(true).TemplateName("TemplateGeneratorRecord")))的名稱,並在EditorTemplates文件夾中創建TemplateGeneratorRecord.cshtml。
2.或者通過在EditorTemplates文件夾中創建一個名爲Record.cshtml的編輯器模板來讓一些奇蹟發生。這是Telerik例子中使用的解決方案。

我選擇了第一個選項。現在它按預期工作。