如何在Table Rows的属性中呈现双引号?

时间:2010-11-25 14:11:31

标签: c# json attributes controls

我试图在TableRow的属性中渲染以下JSON:

{"key": "value"}

完整输出应如下所示:

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

但是,如果我这样做:

var tr = new TableRow();

tr.Attributes.Add("data-json", "{\"key\": \"value\"}");

...双引号被序列化:

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



我提出的唯一解决方案是扩展TableRow控件并手动渲染属性。如果是这样的话;你们能建议实施吗?

2 个答案:

答案 0 :(得分:1)

我认为这不一定是最好的方法 - 正如我所理解的那样,如果没有有效地重写整个渲染方法,就没有简单的方法。

这样的事情是否有问题(感觉更容易) - 请原谅我不存在的js技能。

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


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

答案 1 :(得分: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>");
    }
}