2010-11-25 7 views
1

Ich versuche, auf einem TableRow die folgende JSON in einem Attribut zu rendern:Wie kann ich doublequotes in Attributen auf TableRows wiedergeben?

<tr data-json='{"key": "value"}'> ... </tr> 

Allerdings, wenn ich tun:

{"key": "value"} 

Der komplette Ausgabe sollte wie folgt aussehen

... Die doppelten Anführungszeichen werden serialisiert:

<tr data-json="{&#34;key&#34;: &#34;value&#34;}"> ... </tr> 



Die einzige Lösung, die ich gefunden habe, ist das TableRow-Steuerelement zu erweitern und Attribute manuell zu rendern. Wenn dies der Fall ist; Könnt ihr eine Implementierung vorschlagen?

+0

Sie eine Lösung gefunden, aber gibt es einen Grund, warum Sie nicht einfache Anführungszeichen in den JSON-Daten anstelle von doppelten Anführungszeichen verwenden können? Wäre das nicht genau dasselbe? –

+0

jQuery gibt einen Fehler aus, wenn Sie zwischen einfachen und doppelten Anführungszeichen wechseln. Es muss gültiger JSON sein. – roosteronacid

Antwort

1

ich endete meine eigene TableRow Klasse bis zu schaffen:

public class TableRowAttributeFix : TableRow 
{ 
    private StringBuilder AttributesOutput = new StringBuilder(); 


    protected override void Render(HtmlTextWriter writer) 
    { 
     foreach (String _attributeKey in Attributes.Keys) 
     { 
      var _attributeValue = Attributes[_attributeKey]; 

      if (_attributeValue.Contains("\"")) 
      { 
       AttributesOutput.Append(String.Format(" {0}='{1}' ", _attributeKey, _attributeValue)); 
      } 
      else 
      { 
       AttributesOutput.Append(String.Format(" {0}=\"{1}\" ", _attributeKey, _attributeValue)); 
      } 
     } 


     writer.Write("<tr id=\"" + ClientID + "\" " + AttributesOutput + " class=\"" + CssClass + "\" >"); 

     RenderContents(writer); 

     writer.Write("</tr>"); 
    } 
} 
1

Ich denke nicht, dass dies notwendigerweise der beste Ansatz ist - wie ich es verstehe, gibt es keinen einfachen Weg, dies zu tun, ohne die gesamte Rendermethode effektiv neu zu schreiben.

Gibt es ein Problem mit so etwas (es fühlt sich einfacher an) - und bitte entschuldigen Sie meine nicht existenten js Fähigkeiten.

<tr data-json="getJSON('key', 'value')" /> 


function getJSON(key, value) 
{ 
    return '{ ' + '"' + key + '"' // etc 
} 
+0

Aye, aber das würde nicht mit http://api.jquery.com/data/ integrieren – roosteronacid

Verwandte Themen