2010-11-25 11 views
1

私はのTableRowの属性で、次のJSONをレンダリングしようとしています:TableRowsの属性で二重引用符をレンダリングするにはどうすればよいですか?

{"key": "value"} 

完全な出力は次のようになります。しかし

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

、私がしなければ:

...二重引用符がシリアル化されます。

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



唯一の解決策は、TableRowコントロールを拡張し、属性を手動でレンダリングすることです。このような場合は;皆さんは実装を提案できますか?

+0

あなたは解決策を見つけましたが、あなたはJSONデータの代わりに、二重引用符で単一引用符を使用することはできません何らかの理由はありますか? jqueryはまったく同じことを解析しないでしょうか? –

+0

一重引用符と二重引用符を切り替えるとjQueryがエラーをスローします。それは有効なJSONでなければなりません。 – roosteronacid

答えて

1

私は自分のTableRowクラスを作成することになった:

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

これは必ずしも最良の方法ではないと私は理解しているので、レンダリング方法全体を効果的に書き直さなければ簡単な方法はありません。

このような問題はありますか(それはより簡単です) - 私の存在しないjsのスキルを許してください。

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


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

はい、それはhttp://api.jquery.com/data/と統合されません – roosteronacid

関連する問題