Как я могу сделать двойные кавычки в атрибутах на TableRows? - PullRequest
1 голос
/ 25 ноября 2010

Я пытаюсь отобразить следующий JSON в атрибуте в TableRow:

{"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 ]

1 голос
/ 10 декабря 2010

В итоге я создал свой собственный класс 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 голос
/ 25 ноября 2010

Я не думаю, что это обязательно лучший подход - насколько я понимаю, нет простого способа сделать это без эффективной переписывания всего метода визуализации.

Есть ли проблема с чем-то вроде этого (это легче) - и извините за мои несуществующие навыки js.

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


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