我试图在TableRow的属性中渲染以下JSON:
{"key": "value"}
完整输出应如下所示:
<tr data-json='{"key": "value"}'> ... </tr>
但是,如果我这样做:
var tr = new TableRow();
tr.Attributes.Add("data-json", "{\"key\": \"value\"}");
...双引号被序列化:
<tr data-json="{"key": "value"}"> ... </tr>
我提出的唯一解决方案是扩展TableRow控件并手动渲染属性。如果是这样的话;你们能建议实施吗?
答案 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>");
}
}