Использование HtmlTextWriter в ASP.NET MVC - PullRequest
3 голосов
/ 04 августа 2010

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

Я переносу код для использования ASP.NET MVC 1.0. Насколько мне известно, я не использую какую-либо специальную функцию HtmlTextWriter (например, отступ).

В настоящее время я использую метод-оболочку для возврата строки, сгенерированной HtmlTextWriter, следующим образом:

var sw = new StringWriter();
var xhtmlTextWriter = new XhtmlTextWriter(sw);
GenerateHtml(xhtmlTextWriter);
return sw.ToString();

Мои вопросы:

  1. Я пытаюсь получить экземпляр HtmlTextWriter из ASP.NET MVC View, но, видимо, даже HtmlHelper не использует это. Я что-то пропустил?

  2. Каждый вызов GenerateHtml будет генерировать небольшие фрагменты HTML, как правило, не более 1000 символов, но может быть много вызовов. Стоит ли переписывать зависимый код HtmlTextWriter в StringBuilder? Или вместо этого, как насчет создания HtmlTextWriter экземпляра, который будет использоваться во всех вызовах (и очищаться в конце итераций).

Ответы [ 2 ]

5 голосов
/ 29 октября 2010

Вместо создания StringBuider и StringWriter, я думаю, будет работать helper.ViewContext.writer.

Тогда приведенный выше пример кода будет:

var calendar = new DayPilotCalendar();
if( model != null )
   {
   model.CopyTo( calendar );
   }
if( options != null )
   {
   options.CopyTo( calendar );
   }

HtmlTextWriter writer = new HtmlTextWriter( helper.ViewContext.Writer );

writer.AddAttribute( HtmlTextWriterAttribute.Class, "dayPilot" );
writer.RenderBeginTag( HtmlTextWriterTag.Div );
calendar.RenderControl( writer );
writer.RenderEndTag();  // Close DIV

return( null );         // Don't need to return anything.

Отказ от ответственности: До сих пор я пытался использовать только helper.ViewContext.Writer для получения списка

0 голосов
/ 04 августа 2010

У меня есть демонстрационное приложение , которое показывает, как это сделать в приложении MVC.

Вот пример кода из этого поста.

    public static string DayPilot(
        this HtmlHelper helper,
        DayPilotData model,
        DayPilotViewOptions options)
    {
        var calendar = new DayPilotCalendar();
        if (model != null)
        {
            model.CopyTo(calendar);
        }
        if (options != null)
        {
            options.CopyTo(calendar);
        }
        var sb = new System.Text.StringBuilder();
        sb.Append("<div class=\"dayPilot\">"); // allows working around td cellpadding bug in css
        using (var sw = new System.IO.StringWriter(sb))
        {
            using (var tw = new HtmlTextWriter(sw))
            {
                calendar.RenderControl(tw);
            }
        }
        sb.Append("</div>");
        return sb.ToString();
    }

Что касается № 2, если он не сломался ...

...