Vorbedingungen

Was die Hostanwendung einmal einrichten muss, bevor das erste Grid läuft. Fehlt davon etwas, erscheint keine Fehlermeldung, sondern eine leere Tabelle.

Einmal in der Hostanwendung einzurichten. Fehlt etwas davon, erscheint keine Fehlermeldung: Die Tabelle bleibt leer, ohne Gestaltung oder ohne Verhalten.

Setzt die Grundeinrichtung aus Basis › Vorbedingungen voraus.

Für jede Tabelle

Was Wo Fehlt es
Paket FMH.Komponente.Tabelle .csproj kennt der Compiler Fmh<T>.Grid nicht. Basis und Infrastruktur kommen transitiv mit und brauchen keinen eigenen Eintrag
Grundeinrichtung aus Basis › Vorbedingungen Program.cs, _Layout.cshtml fehlen DataTables, jquery-fmh-grid.js und das SCSS der Tabelle. Die Tabelle erscheint als ungestaltete HTML-Tabelle, mit AjaxDataUrl ganz ohne Zeilen. Ohne die BodyIncludes läuft auch das Skript nicht, das jedes Grid einrichtet
builder.Services.AddControllersWithViews(options =>
{
    // Grundeinrichtung der Basis, siehe Basis › Vorbedingungen.
    options.AddFmhWidgetOptions();

    // Nur für AjaxDataUrl nötig, schadet mit BindTo aber nicht.
    options.AddFmhTabelleOptions();
});

Die Bundles der Tabelle meldet das Paket selbst an, die Grundeinrichtung findet sie über die referenzierten Assemblies. Einen Eintrag je Datei braucht es nicht.

Zusätzlich für AjaxDataUrl

  • options.AddFmhTabelleOptions() aus FMH.Komponente.Tabelle.Erweiterungen. Es registriert den Binder für GridDatatableParameter. Ohne ihn kommt der Parameter leer im Endpunkt an, weil der Browser start, length, search[value] und order[0][dir] schickt, nicht Skip und Take. AddFmhWidgetOptions() bringt ihn nicht mit, die Basis kennt die Tabelle nicht. Die Reihenfolge der beiden Aufrufe spielt keine Rolle, ein doppelter Aufruf trägt den Binder nicht zweimal ein. Wer bisher options.ModelBinderProviders.Insert(3, new GridDatatableParameterBinderProvider()) geschrieben hat, ersetzt die Zeile durch den Aufruf.

  • Die Antwort in Pascal Case. Das Grid liest Datasource, TotalRecords, TotalDisplayRecords und Draw. Der Serializer schreibt ohne Zutun Camel Case, und die Tabelle bliebe leer. Dafür genügt eine Einstellung mit PropertyNamingPolicy = null:

    private static readonly JsonSerializerOptions JsonPascalCase = new() { PropertyNamingPolicy = null };
    
  • Die HTTP-Methode des Endpunkts passend zum Grid. AjaxDataUrl(url) fragt ohne weitere Angabe per POST an, AjaxDataUrl(url, FormMethod.Get) per GET. Ein GET-Endpunkt bei POST-Abfrage antwortet mit 405, und in der Browser-Konsole steht der Hinweis des Grids auf die falsche Methode.

Wie der Endpunkt selbst aussieht, zeigt das Beispiel Datasource (Ajax) › Grundfall.