Asp.net-Mvc

劍道網格模板中的 For 循環

  • May 31, 2018

我對劍道網格有很大的麻煩。

如果我像這樣使用 for 循環作為客戶端模板

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

i 永遠不會增加。與while循環相同,循環內遞增。

如何解決這個問題?

謝謝

編輯 - Grid 的完整聲明:

@(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"))
)

對於有此問題的下一個,您可以通過不同的方式解決。

第一種方式(棘手):添加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);

引用自:https://stackoverflow.com/questions/17928251