For循环在Kendo网格模板

问题描述:

我对Kendo网格有一个很大的麻烦。For循环在Kendo网格模板

如果我使用一个for循环客户端模板,因为这

col.Bound(m => m.Compteurs) 
    .ClientTemplate("# for (var i=0;i<4;i++) { console.log(i) } #"); 

我永远不会增加。 与while循环和循环内增量相同。

如何解决这个问题?

谢谢

编辑 - 电网的完整声明:

@(Html.Kendo().Grid<EAGLE.Models.ParamUf>() 
.Name("ParamGrid") 
.Columns(col => 
    { 
     col.Bound(m => m.Groupement); 
     col.Bound(m => m.Etablissement).ClientTemplate("#= Etablissement.EtablissementName #"); 
     col.Bound(m => m.Service).ClientTemplate("#= Service.ServiceName #"); 
     col.Bound(m => m.Discipline).ClientTemplate("#= Discipline.DisciplineName #"); 
     col.Bound(m => m.Unite).ClientTemplate("#= Unite.UniteName #"); 
     col.Bound(m => m).ClientTemplate(Html.Partial("_Tel").ToHtmlString()); 
     col.Bound(m => m.Unite.TypeHebergement).Title("Hébergement"); 
     col.Bound(m => m.Installe); 
     col.Bound(m => m.Ferme); 
     col.Bound(m => m.Compteurs).ClientTemplate("# for (var i=0;i<4;i++) { console.log(i) } #");   
     col.Command(commands => 
     { 
      commands.Edit().UpdateText("Mettre à jour").CancelText("Annuler").Text("Edit"); 
      commands.Destroy().Text("Suppr."); 
     }).Title(string.Empty).Width(160); 

    } 
) 
.DataSource(data => data 
       .Ajax() 
       .Read(read => read.Action("Param_Read", "Param", new { entityCode = @ViewBag.Code, entityType = @ViewBag.Type }).Data("filterUnit")) 
        .Model(m => 
        { 
         m.Id(a => a.Unite.UniteCode); 
         m.Field(a => a.Etablissement).DefaultValue(new EAGLE.Models.Etablissement()); 
         m.Field(a => a.Service).DefaultValue(new EAGLE.Models.Service()); 
         m.Field(a => a.Discipline).DefaultValue(new EAGLE.Models.Discipline()); 
         m.Field(a => a.Unite).DefaultValue(new EAGLE.Models.Unite()); 
        }) 
       .Create(cre => cre.Action("Param_Create", "Param")) 
       .Update(upd => upd.Action("Param_Update", "Param")) 
       .Destroy(des => des.Action("Param_Destroy", "Param")) 
       .Batch(false) 
       .ServerOperation(false)) 
.Pageable(pager => pager 
    .Enabled(false)   
    .Messages(m => m.Display("Nombre total d'hébergement : {2}")) 
    .Messages(m => m.Empty("Pas d'hébergement.")) 
    .PreviousNext(false) 
    .Input(false) 
    .Numeric(false)) 
.ToolBar(toolbar => { toolbar.Create(); }) 
.Editable(ed => ed.Mode(GridEditMode.PopUp).TemplateName("_ParamEdit")) 
.Events(e => e.DataBound("onDatabound")) 
) 
+1

你有没有解决这个问题?我有**完全相反的问题,其中计数器不会**停止**递增(即使是硬编码少于这里的数字),它会使选项卡崩溃。 JavaScript语法没有错,因为它可以在开发工具中完美运行。 – pwdst

+1

是的,我们发现生成的代码删除了++。我发表下面的答案。 –

对于存在此问题的下一个问题,您可以通过不同的方式进行解决。

1路(狡猾): 添加JavaScript函数increment

function increment(a) 
{ 
    return a++; 
} 

并用它在模板

col.Bound(m => m.Compteurs) 
    .ClientTemplate("# for (var i=0;i<4;increment(i)) { console.log(i) } #"); 
通过C#代码

第二个方法(包括本col.Bound之间):

int i = 0; 
    foreach (EAGLE.Models.Compteur c in ViewBag.Compteurs) 
    { 
     col.Bound(m => m.Compteurs[i].Dispo).Title(c.NomCourt) 
      .HtmlAttributes(new { style = String.Format("background-color:\\#{0}", c.Color), @class = "compteur" }) 
      .HeaderTemplate("<img class='iconeHeader' src='data:image/png;base64," + c.Picto + "' title='"+ c.Nom +"' />"); 
     i++; 
    } 

第三条路(马修的答案):

var template = "# for (var i=0;i<4;i++) { console.log(i) } #"; 
var plusEncoded= System.Web.HttpUtility.UrlEncode("+"); 
template = Regex.Replace(template, @"[+]", plusEncoded); 
col.Bound(m => m.Compteurs).ClientTemplate(template); 
+0

return ++ a会更好,在你的例子中它并不重要,但仍然... – Robert

+0

你可以把整个for-loop放在一个javascript函数中。这将是一个更清洁。 – ataravati

+1

第三种方式不起作用。然而,这是: var template =“#for(var i = 0; i m.Compteurs).ClientTemplate(template); – Matthew

这应该有工作。至少这个JavaScript版本确实work

$("#grid").kendoGrid({ 
    dataSource: [ 
    { name: "John" }, 
    { name: "Jane" } 
    ], 
    columns: [ 
    { field: "name" }, 
    { field: "name", 
    template: "# for (var i=0;i<4;i++) { console.log(i) } #" 
    } 
    ] 
}); 

难道说你的网是不是阿贾克斯约束?显示完整的配置将确认或否认这一点。

+0

网格是与数据源对象绑定的ajax。另一列适用于ClientTemplate或ClientTemplate +部分视图。我使用Kendo MVC Component for .Net来生成这个。 –