2017-09-29 2 views
0

Ich habe eine JavaScript-Methode, die ein Kendo-Fenster öffnet, dieses Fenster enthält ein Kendo-Gitter mit einer Datenquelle, die ich von meinem Controller bekommen möchte. Um die Daten in dieses Raster zu bringen, muss ich eine ID übergeben. Die JavaScript-Methode, die dieses Fenster öffnet, enthält die notwendigen Daten, aber ich weiß nicht, wie ich diese Daten in meinem Kendo-Grid bekommen kann. Ich muss meine ID zum (read => read.Action("Read_Action", "ControlerName", new { linenum = ??? }) Teil erhalten, wo ich die Fragezeichen durch meine Identifikation ersetzen möchte.Kendo-Window-Parameter

JavaScript:

function showDetails(e) { 
     e.preventDefault(); 
     var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 
     console.log(dataItem.LineNum); 
     var wnd = $("#Details").data("kendoWindow"); 
     wnd.center().open(); 
    } 

Kendo-Fenster:

@{Html.Kendo().Window().Name("Details") 
    .Title("Location Details") 
    .Visible(false) 
    .Modal(true) 
    .Draggable(true) 
    .Width(800) 
    .Height(600) 
    .Content(        
      Html.Kendo().Grid<TelerikMvcApp1.Models.BinLocationItemModel>() 
       .Name("LocItemGrid") 
       .DataSource(dataSource => dataSource 
        .Ajax() 
        .Model(model => model.Id(m => m.BinLocationItemId)) 
        .Read(read => read.Action("Read_Action", "ControlerName", new { linenum = ??? }))) 
        .ToHtmlString()).Render(); 
} 

Antwort

1

Sie nur diese einen Controller tun können, Ihren Fensterinhalt als Teilansicht zu öffnen.

Richten Sie Ihre Steuerung, die die Teilansicht machen wird und die ID ViewBag hinzufügen in Kendo Fenster, mit Id

public ActionResult GetKendoWindow(){ 
    ViewBag.Id = 123; 
    return PartialView("_PartialView"); // Html file name 
} 

Ihre „_PartialView“ Datei nur das Netz enthalten wird nun abrufen ohne den Inhalt einer zugeordneten aus ViewBag.Id

Html.Kendo().Grid<TelerikMvcApp1.Models.BinLocationItemModel>() 
       .Name("LocItemGrid") 
       .DataSource(dataSource => dataSource 
        .Ajax() 
        .Model(model => model.Id(m => m.BinLocationItemId)) 
        .Read(read => read.Action("Read_Action", "ControlerName", new { linenum = ViewBag.Id })) 

Ihre kendo().window() Methode wird diese (ändern s es aus dem Teilansicht laden werden)

@{Html.Kendo().Window().Name("Details") 
    .Title("Location Details") 
    .Visible(false) 
    .Modal(true) 
    .Draggable(true) 
    .Width(800) 
    .Height(600) 
    .LoadContentFrom("GetKendoWindow", "Controller") 
    .ToHtmlString()).Render(); 
} 

Wenn Ihre ID wird von der übergeordneten Seite (zu der Seite, die Sie öffnen das Fenster aus), müssen Sie die ID übergeben an die Steuerung auf, Ihre .LoadContentFrom("GetKendoWindow", "Controller") würde dann .LoadContentFrom("GetKendoWindow?ID=123", "Controller") werden.

Und Ihre Controller Erklärung würde public ActionResult GetKendoWindow(int ID)

Edit: Wenn Sie den Wert von JavaScript-Ereignis abzurufen, würden Sie vorzugsweise für Einfachheit Fenster mit JavaScript öffnen möchten, in Ihrem Fall die

folgende setzen
$("#Details").kendoWindow({ 
    width: "620px", 
    height: "620px", 
    title: "Window Title", 
    content: { 
     url: "GetKendoWindow", 
     type: "GET", 
     data: {ID : dataItem.ID} 
    } 
}); 

entfernen Sie Ihre Kendo().Window() Razor Funktion vollständig, und ein leeres div mit id-Details lassen, und das Fenster öffnen mit $("#Details").data("kendoWindow").center().open()

komplette Code für Einfachheit:

<div id="Details"></div> 

<script> 
// Your event function where you retrieve the dataItem 
$("#Details").kendoWindow({ 
    width: "620px", 
    height: "620px", 
    title: "Window Title", 
    content: { 
     url: "GetKendoWindow", 
     type: "GET", 
     data: {ID : dataItem.ID} 
    } 
}); 

$("#Details").data("kendoWindow").center().open() 
//End the event function 
</script> 

Dann von oben Ihre Controller-Methode hinzufügen.

public ActionResult GetKendoWindow(int ID){ 
    ViewBag.Id = ID; 
    return PartialView("_PartialView"); // Html file name 
} 
+0

Wie würde ich variable Daten weitergeben? zum Beispiel '(" GetKendoWindow? ID = dataItem.ID ")' weil die ID basierend auf dem ausgewählten Element unterschiedlich ist. – Alim

+0

@Alim Wie so, ("GetKendoWindow? ID =" + dataItem.ID) – Adriani6

+0

Nur dataItem.ID existiert nicht im Kendo-Fenster nur in meinem Javascript, das es öffnet. – Alim

-1

könnten Sie Kendo DataSource additional data wie folgt verwenden:

$("#grid").data("kendo-grid").dataSource.read({additional:"data"}); 

Dies wird auf Grid Demo-Seite arbeiten: http://demos.telerik.com/kendo-ui/grid/remote-data-binding. Es fügt der Anfrage einen Parameter hinzu.

Sie könnten wahrscheinlich die Funktion einstellen, die zusätzliche Daten in dataSource zurückgibt - siehe die Dokumentation: http://docs.telerik.com/aspnet-mvc/helpers/grid/faq#how-do-i-send-values-to-my-action-method-when-binding-the-grid?

EDIT 1

Sie dies einfach, indem das Netz der zusätzlichen Anforderungsdaten erreichen können:

$("#grid").data("kendo-grid").dataSource.transport.options.read.data = { additional: "data"}; 

So öffnen Sie das Fenster mit Kendo Gitter. Wählen Sie das Raster mit typischen $(...).data("kendoGrid"). Setzen Sie dann die dataSource.transport.options.read.data auf Ihre Leitungs-ID.

+0

Die Frage war, wie Daten von der übergeordneten Seite an Kendo-Fenster übergeben werden nicht, wie man das Gitter mit Parameter auffrischt.Er möchte das Gitter mit einem übergebenen Parameter holen – Adriani6

+0

Ich verstehe - Sie können das entweder erreichen, indem Sie die Gitterbindung manuell starten oder indem Sie 'dataSource.transport.options.read.data' (siehe editted antwort). – LordMsz