2013-03-21 9 views
5

Umgang habe ich einfache Seite mit Kendo TabStrip innenKendo TabStrip mit KendoGrid innen für Events mit JavaScript

<div id="main-view" class="k-content"> 
    @(Html.Kendo().TabStrip() 
      .Name("main-view-tabstrip") 
      .Items(tabstrip => 
       { 
        tabstrip.Add().Text("My Notices").LoadContentFrom("MyNotices", "Notice").Selected(true); 
       })) 
</div> 

Es lädt Inhalt für mich auf Nachfrage, die NoticeController abfragt. NoticeController hat MyNotices Aktion mit mir zurück PartialView.

public PartialViewResult MyNotices() 
{ 
    // put some values into ViewData 

    return PartialView(); 
} 

Die PartialView itseld wie folgt aussieht:

<div style="margin: 20px; height: 700px;"> 
    @(Html.Kendo().Grid<NoticeViewModel>(Model) 
     .HtmlAttributes(new { @class = "fullScreen" }) 
     .Name("NoticesList") 
     .Columns(columns => 
      { 
       columns.Bound(x => x.UniqueId).Title("UniqueId"); 
       columns.Bound(x => x.FormName).Title("Form"); 
       columns.Bound(x => x.Revision).Title("Revision"); 
       columns.Bound(x => x.Language).Title("Language"); 
       columns.Bound(x => x.Status).Title("Status"); 
      } 
    ) 
     .Pageable() 
     .Scrollable() 
     .Sortable() 
     .Selectable() 
     .ToolBar(
      toolbar => toolbar.Create().Text("New") 
    ) 
     .Editable(
      ed => ed.Mode(GridEditMode.PopUp) 
       .TemplateName("NoticeCreate") 
       .Window(w => w.Title("Create Notice") 
        .Name("createNoticeWindow1") 
        .HtmlAttributes(new { id = "createNoticeWindow" }) 
        .Modal(true) 
        ) 
       .DisplayDeleteConfirmation(true) 
       ) 
     .Resizable(resize => resize.Columns(true)) 
     .DataSource(dataSource => dataSource.Ajax() 
              .PageSize(25) 
              .ServerOperation(true) 
              .Read("List", "Notice") 
              .Create("NoticeCreate", "Notice") 
              .Events(events => events.Error("errorHandler")) 
              .Model(model => model.Id(x => x.UniqueId)) 

    )) 
</div> 

<script> 
    function errorHandler(e) { 
     if (e.errors) { 
      var message = "Errors:\n"; 
      $.each(e.errors, function (key, value) { 
       if ('errors' in value) { 
        $.each(value.errors, function() { 
         message += this + "\n"; 
        }); 
       } 
      }); 
      alert(message); 
     } 
    } 
</script> 

Wenn ich den Code ausführen ich JS Fehler erhalten, dass errorHandler nicht gefunden werden kann. Wie Sie sehen können, habe ich es in meinem PartialView.

<script> 
    function errorHandler(e) { 
     if (e.errors) { 
      var message = "Errors:\n"; 
      $.each(e.errors, function (key, value) { 
       if ('errors' in value) { 
        $.each(value.errors, function() { 
         message += this + "\n"; 
        }); 
       } 
      }); 
      alert(message); 
     } 
    } 
</script> 

Also die Frage ist, wie Javascript in Teilansicht verwenden, wenn Sie es in TabStrip zeigen?

Wenn ich .Events(events => events.Error("errorHandler")) aus dem Raster entfernen, funktioniert alles gut.

Antwort

5

Das Problem behoben, ich nicht warum, aber wenn ich Java-Skript-Block am Anfang setzen, beginnt es zu arbeiten.

Also wenn jemand solche Ausgabe treffen einfach setzen <script/> Block vor der Deklaration Kendo.Grid().

+3

Ich habe dieses Verhalten auch mit Kendo und MVC-Server-Wrapper gesehen, re: JS-Ereignisse, die in der serverseitigen Wrapper deklariert werden müssen über den Wrapper geschrieben werden. –

+0

Wenn Sie die Konsole während des Ladens der Seite öffnen, wird wahrscheinlich ein Fehler angezeigt, der dem von "errorHandler wird nicht deklariert" ähnelt. Dies liegt daran, dass das Kendo-Widget beim Laden der Seite nach der Funktion sucht, und wenn es unten erklärt wird, bedeutet dies, dass das Gitter es nicht finden kann, weil es noch analysiert werden muss. – Pizzaboy

Verwandte Themen