2009-06-23 2 views
5

Ist es möglich zu vermeiden, NULL-Stings auf dem Client beim Binden von JSON-Daten an HTML-UI?Wie vermeidet man "Null" -Strings beim Binden von JSON-Daten auf der Client-Seite

Ich benutze ASP.NET MVC + jQuery + jTemplates. Die Daten stammen von linq-to-sql-Klassen, und diese Klassen haben ziemlich viele Nullable-Eigenschaften. Wenn solche Eigenschaften erhalten serialisiert und übertragen zurück zum Client ich mit solchen JSON am Ende:

[{"Id":1,"SuitId":1,"TypeId":null,"Type":null,"CourtId":null,"Court":null}] 

Whey ich diese Daten binden HTML ich eine Menge ‚NULL‘ Strings haben. Ich habe sowohl manuelle Bindung als auch JavaScript Templating-Engines (jTemplate) ausprobiert. Die Ergebnisse sind gleich. Derzeit mit dieser Ausgabe von ‚Koaleszenz‘ die Null-Werte, die ich zu tun habe, wie folgt:

$('#Elem').val(someVar||''); 

Aber ich will es nicht manuell tun.

Bitte Rat, wenn ich:

  1. automatisch auf NULL festlegbare Eigenschaften übersetzen Strings zu leeren, indem entweder die Serialisierung zwicken oder vielleicht den 3rd-Party-JSON Serializer über .NET JSON Serializer wählen.
  2. Kann alles auf der Clientseite tun, z. B. mit jQuery- oder Templating-Engines umgehen.

Vielen Dank.

Antwort

2

Sie können benutzerdefinierte Serialisierung einrichten (

How to implement custom JSON serialization from ASP.NET web service? sehen)

Sie können auch Ihre eigene Version von val machen, die auf eine leere Zeichenfolge null umwandelt. Ich denke jedoch, dass die Methode, die Sie derzeit verwenden, wahrscheinlich sowieso besser ist - die generischen Methoden könnten eine Menge Komplexität und möglicherweise versteckte Fehler hinzufügen.

1

Ich frage mich eher, an welchem ​​Punkt sind die Daten falsch? Ist es falsch zu sagen, die TypeId ist Null (unbekannt, nicht zugewiesen), wenn es speziell zugewiesen werden soll "" (leere Zeichenfolge)?

In diesem Fall würde ich nicht raten, was ist falsch, es ist die Art, wie die Präsentation "Null" anzeigt, wollen Sie einfach eine leere Textbox oder so etwas. In diesem Fall ist es das Problem der Präsentation, die Daten in eine akzeptable Ansicht zu konvertieren, das ist ihre Aufgabe. Daher scheint mir Ihre Verwendung von "Koaleszenz" korrekt zu sein.

Natürlich ist das vielleicht eine zu strenge Interpretation und vielleicht nicht so pragmatisch, wie Sie es gerne hätten. Auf lange Sicht jedoch (ich meine über die Lebensdauer des Codes) ist es normalerweise am besten, die Dinge so korrekt wie möglich zu halten.

3

Sie können jtemplate ändern, um eine leere Zeichenfolge anstelle von null zurückzugeben, indem Sie die folgende Codezeile in jquery.jtemplate.js ändern.

Erste diese Funktion finden

TemplateUtils.cloneData = function(d, filter, f_escapeString) { 

Schon am nächsten Codeblock ist eine if-Anweisung

if (d == null) { 
    return d; 
} 

dass Ändern zu

if (d == null) { 
    return ""; 
} 

Und das sollte es

+0

Gute Arbeit, sehr clever. Ersparte mir eine Menge Mühe. – Gregory

0
tun

Nur für jTemplates, das habe ich gemacht:

{#if $T.mylist.nullableProperty != null}{$T.myList.nullableProperty}{#/if} 
Verwandte Themen