ASP.Net MVC 3, JQGrid
Nach der Lektüre bis auf den JQGrid-Steuerung, beschloss ich, es wäre gut, um es in einem meiner ASP.Net MVC 3 Web-Anwendungen.
Erstens folgte ich Phil Haacks tutorial http://haacked.com/archive/2009/04/14/using-jquery-grid-with-asp.net-mvc.aspx ist alles gut. Ich habe dann versucht, etwas umzusetzen, ähnlich wie in meiner app, der einzige Unterschied ist, ich nutze Linq To Entities.
Meine Ansicht Seite hat alle css-und Jquery-Klassen importiert, dann habe ich meinen JavaScript-Funktion und die Tabelle enthält die Daten
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery("#list").jqGrid({
url: '/Home/LinqGridData/',
datatype: 'json',
mtype: 'GET',
colNames: ['equipmentID', 'categoryTitle', 'title'],
colModel: [
{ name: 'equipmentID', index: 'equipmentID', width: 40, align: 'left' },
{ name: 'categoryTitle', index: 'categoryTitle', width: 40, align: 'left' },
{ name: 'title', index: 'title', width: 200, align: 'left'}],
pager: jQuery('#pager'),
width: 660,
height: 'auto',
rowNum: 10,
rowList: [5, 10, 20, 50],
sortname: 'Id',
sortorder: "desc",
viewrecords: true,
imgpath: '/scripts/themes/coffee/images',
caption: 'My first grid'
});
});
<h2>My Grid Data</h2>
<table id="list" class="scroll" cellpadding="0" cellspacing="0"></table>
<div id="pager" class="scroll" style="text-align:center;"></div>
Dann in meinem controller habe ich folgende Methode, die angenommen, die Rückkehr der Json-Daten
public ActionResult LinqGridData(string sidx, string sord, int page, int rows)
{
AssetEntities context = new AssetEntities();
var query = from e in context.Equipments
select e;
var count = query.Count();
var result = new
{
total = 1,
page = page,
records = count,
rows = (from e in query
select new
{
id = e.equipmentID,
cell = new string[]
{
e.equipmentID.ToString(),
e.Category.categoryTitle,
e.Department.title
}
}).ToArray()
};
return Json(result, JsonRequestBehavior.AllowGet);
}
Wenn ich diese ausführe, ist der code fällt mit dem folgenden Fehler
LINQ to Entities does not recognize the method 'System.String ToString()' method
Weiß jemand, wie man diesen Fehler beheben? Und auch, Tue ich dies der richtige Weg ist, oder soll ich es tun eine andere Weise von der Phil Haack Erklärung, da er mithilfe von Linq to SQL?
Jedes feedback würde sehr geschätzt.
Vielen Dank Leute.
- welche Codezeile den Fehler erzeugt? Denn durch meine beste Vermutung, es sieht aus wie es ist passiert in deinem controller (der einzige Ort, den ich sehen .ToString () - Methode)
- Ja, Sie sind richtig. Die Anwendung fällt bei e.- Ausrüstung.ToString() . Alle Lösungen? Danke.
- was ist der Datentyp von e.equipmentID? Wenn es schon ein string, das mag Ihr problem sein. Alternativ, wenn es etwas ist, dass nicht die .toString () - Funktionalität eingebaut, wie ein benutzerdefinierter Daten-Typ, das könnte auch das problem sein.
- e.equipmentID ist vom Typ int, es muss gegossen werden, um den Typ string, das ist, warum ich es versucht habe .ToString()
Du musst angemeldet sein, um einen Kommentar abzugeben.
EF nicht unterstützt ToString-Methode, müssen Sie die Daten abrufen, ohne ToString und format
sollte diese Arbeit
Blick auf die code-Beispiel von die andere Antwort. Ich hoffe, es wird hilfreich sein.
Kleine Bemerkungen:
sortname: 'Id'
ist falsch-parameter, weil Sie keine Spalte mit dem Namen 'Id'. Wahrscheinlich meinst dusortname:'equipmentID'
.imgpath: '/scripts/themes/coffee/images'
parameter von jqGrid die depricated.<table id="list"></table><div id="pager"></div>
Equipment
Klasse? In einem anderen Kommentar schrieben Sie, dasse.equipmentID
Typint
und Sie sagen, dass der Fehler ine.equipmentID.ToString()
. Auf der anderen Seite haben Sie Fehlermeldung über'System.String ToString()' method
. Einige von den Informationen, die falsch ist. Versuchen Sie, kommentieren Sie die Zeile mite.equipmentID.ToString()
und stellen Sie sicher, dass Sie keinen Fehler.total = 1
. Die referenzierte Antwort zeigen, wie zu implementieren paging und Sortieren.Ah, ich habe das Problem entdeckt. .ToString funktioniert nicht in LINQ to Entity. Ja, das ist seltsam und IMO sehr dumm. Aber das ist der Kern des Problems. Für ein work-around...wenn JSON serialisiert Dinge, die Sie am Ende der Suche sehr viel wie eine Zeichenfolge sowieso, durch die Zeit, jQuery herum, Sie zu Lesen. So, im wesentlichen, Sie sollten in der Lage sein, um vollständig zu lassen .ToString() und es sollte funktionieren.
Werde ich der Frage nachgehen, inline-editieren und hinzufügen einer neuen Zeile zu jqGrid, wie es gilt für ASP.NET MVC 3 und Gestochen von C#. Auch ein C# - Controller-code zum füllen der raster und speichern von Daten auf dem Netz. Zuerst lässt Blick auf, wie zu installieren, jqGrid 4.4.1 in einem MVC3 Web-Anwendung mit dem NuGet-Paket-manager.
Können Sie herunterladen jqGrid getrennt von
http://www.trirand.com/blog/?page_id=6
und das jqGrid Dokumentation finden Sie auf
http://www.trirand.com/jqgridwiki/doku.php
Werde ich nicht testen, der code in diesem post, aber es basiert auf code, der funktioniert. Ich werde die brute-force-Ansatz zur Lösung der schwierigen und komplexen problem, füllen ein jqGrid von einer action-Methode, die Bearbeitung einer einzelnen Zeile oder das hinzufügen eines neuen editierbare Zeile, speichern Sie die Zeile zu einer action-Methode. Ich bin sicher, dass mehr optimale Möglichkeiten, dies zu tun, können gefunden werden, aber dies ist ein guter Ausgangspunkt. Ich bin nicht, Ihnen zu zeigen, wie Sie Sie optimieren das Erscheinungsbild Ihrer jqGrid, überlasse ich Ihnen. Ich werde mich mit JSON als Datenaustausch-format zwischen jqGrid und ASP.NET MVC-3. Ich werde nicht die Adresse das Problem von löschen einer Zeile im raster.
Beginnen wir mit der GET-Aktion-Methode im Controller
... Und der Blick...
und dann die POST-Methode
Gibt es bessere Möglichkeiten, dies zu tun, aber das ist ein guter Anfang. Ich bin nicht der Bewältigung der dynamischen grid-Problem. Ich bin nicht sicher, wie das erreicht werden könnte. Es genügt zu sagen, dass eine dynamische jqGrid würde erfordern viel mehr JavaScript und/oder C# - code. Ich würde werfen Sie einen Blick auf die "grid in einem grid" - Funktionalität in jqGrid eine Kombination aus einem statischen Gitter mit einer dynamischen grid.
Ich habe versucht mit build-Funktionen akzeptieren würde, der Typ des Objektes, eine Liste von Datensätzen und erzeugen den jqGrid-Array und Json-Daten für das grid, ohne all die zusätzliche Arbeit, die oben gezeigt. Ich denke, es kann getan werden, mit Reflexion aber ich habe keine Zeit, es jetzt tun.
Endlich habe ich auch versucht, den Aufbau Funktionen, extrahiert die Daten aus der FormCollection und füllen Sie ein Objekt gegeben, nur den Objekt-Typ und die FormCollection. Wieder, ich denke, das getan werden kann mithilfe der reflektion, aber I dont haben Zeit, um es jetzt tun. Wenn jemand will, um zu versuchen, um eine MVC3-C# jqGrid Json-generator und extractor, ich würde empfehlen, dass Sie die Entity Framework Code First Methode mit POCO-Klassen für Ihr Modell. POCO-Klassen sind viel einfacher zu arbeiten, als entity-Objekte für eine solche Aufgabe.
Ich hoffe, das hilft 🙂