Senden Sie das Formular mit Kendo MVC Grid-und anderen Elementen
Ich versuche ein Formular mit einem telekik MVC grid-und anderen Elementen zu unterbreiten.
- View-Modell enthält drei string-Felder und ein
IEnumerable
Sammlung. - Das raster ist server gebunden. Ich bin nicht hinzufügen, Elemente löschen oder alle Elemente aus der Liste mit Hilfe der raster aber raster enthält ein Kontrollkästchen zugeordnet, um eine boolean-Spalte in der Liste Elemente.
Immer wenn ich dieses Formular abgesendet haben die drei string-Elemente zurück in die post-Methode, aber Liste ist immer null.
Hier ist das Daten-Modell:
public class Parent
{
public string Field1{get;set;}
public string Field2{get;set;}
public string Comments {get;set;}
public IEnumerable<ChildItems> Children{get;set;}
}
Public class ChildItems
{
public string ChildField1{get;set;}
public string ChildField2{get;set;}
public boolean Include{get;set;}
}
Hier ist meine Ansicht:
@{
ViewBag.Title = "Index";
}
@model GridInForm.Models.Parent
@using(Html.BeginForm("Save", "Home"))
{
<fieldset>
<legend>Editing Parent</legend>
@Html.LabelFor(parent => parent.Field1)
@Html.EditorFor(parent => parent.Field1)
@Html.LabelFor(parent => parent.Field2)
@Html.EditorFor(parent => parent.Field2)
@Html.LabelFor(parent => parent.Comments)
@Html.EditorFor(parent => parent.Comments)
@(Html.Kendo().Grid(Model.Children)
.Name("Children")
.ToolBar(tools => tools.Create().Text("Add new Children"))
.Editable(editable => editable.Mode(GridEditMode.PopUp)
.CreateAt(GridInsertRowPosition.Bottom))
.Columns(columns =>
{
columns.Bound(p => p.ChildField1).ClientTemplate("#= ChildField1 #" +
"<input type='hidden' name='ChildField1[#= index(data)#].ChildField1'
value='#= Name #' />"
);
columns.Bound(p => p.ChildField2).Hidden().ClientTemplate("#= ChildField1
#" +
"<input type='hidden' name='ChildField1[#= index(data)#].ChildField1'
value='#= ChildField1 #' />"
);
columns.Command(command =>
{
//command.Destroy();
command.Edit();
}
).Width(100);
})
.DataSource(dataSource => dataSource.Server().Create("Create",
"Home").Read("Index", "Home").Update("Update", "Home")
.Model(model =>
{
model.Id(p => p.ChildField1);
model.Field(p => p.ChildField1).Editable(false);
})
//.ServerOperation(true)
)
)
</fieldset>
<input type="submit" value="Save" />
}
<script>
function index(dataItem) {
alert("bindind");
var data = $("#Products").data("kendoGrid").dataSource.data();
return data.indexOf(dataItem);
}
</script>
Wenn ich das Formular abschicken bekomme ich die Eltern-Elemente zurück in die Ansicht Modell, aber das Inumerable Felder aus dem grid sind immer null..
Ist dies einfach nicht der Weg, dies zu tun und wenn ja, was ist der Weg zu acommplish so etwas wie dieses. Ich hatte dieses Problem bei früheren Versionen von telerik und ich sehe es ist das gleiche auf die Kendo-UI. Jede Richtung würde sehr geschätzt werden. Dies wurde entlang gehen am Problem.
InformationsquelleAutor user2016808 | 2013-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe genau dieses Szenario funktioniert perfekt in mein Projekt. Hier ist mein raster Erklärung...
Hier ist die "index" - Funktion:
Nope, müsste man überprüfen, für geänderte Zeilen in der controller-action-Methode.
Wo sind Sie zu bekommen-Index aus? Ich bin immer ein Fehler auf?
Ich habe die index-Funktion auf meine Antwort
Erstmal, Super Antwort. Dies hat mir geholfen, enorm. Zweitens, für alle, die kommen über diese Antwort und Frage mich, was "MyLines" ist.. Es ist der name der Sammlung/Aufzählbare/Auflisten auf Ihre Eltern view-Modell. Seine wohl auf der Hand, um Sie Veteranen, aber es dauerte eine minute oder 2, um herauszufinden, während des Debuggens. Danke Shawn!
InformationsquelleAutor Shawn de Wet
So, hier ist Teil einer Lösung für Ihre Frage. Ich streckte die kendo-Datenquelle, so können Sie diese Funktion aufrufen und erhalten Sie alle aktualisiert, gelöscht, erstellt, die Elemente aus. Schalten Sie es in json und senden Sie es zurück mit dem restlichen Formularfelder. Ich habe diese Arbeit jetzt. Dachte, ich würde teilen.
InformationsquelleAutor
Inspiriert wurde ich dazu von codebeastie und @user1878526 um die folgende hybrid-Idee - einfach Rückkehr das raster als eine Liste von strings an den controller speichern Aktion:
Controller:
Anzeigen:
Diese können dann analysiert werden, in der Steuerung relativ einfach durch 'Split' Ing auf Kommas und Doppelpunkte.
InformationsquelleAutor Richard Freeman