2013-08-05 1 views
0

Я работаю над ASP.NET уже более года, и я натолкнулся на интересную мысль о том, что мне нужна обратная связь.Использование Literal vs GenericHtmlControl and viewstate reduction

Я заметил, что элементы управления Literal сохраняют свое текстовое значение в viewstate. Для меня это кажется несколько странным, так как оно эффективно гарантирует, что содержимое, содержащееся в элементе управления Literal, будет дублироваться (один раз на отображаемой странице и один раз скрытый в представлении).

В качестве альтернативы я начал использовать общие элементы управления html с помощью runat = "server" и свойств innerhtml/innertext. Мне кажется, что я добился того же, что и литеральный контроль без раздувания viewstate, если вам нужно в любом случае обернуть содержимое в тег. Прежде чем я перейду и уничтожу как можно больше Литератур в моем проекте, мне интересно, есть ли какой-то недостаток, о котором я не думаю. Мысли?

+0

Вы используете или изменения значения эти элементы управления на стороне сервера? –

ответ

0

Я бы также подумал о создании собственного пользовательского элемента управления, что было бы очень легко сделать. Вы можете сделать:

public class MyLiteral : WebControl 
{ 
    public string Text { get; set; } 


    protected override void Render(HtmlTextWriter writer) 
    { 
     writer.Write(this.Text); 
    } 

} 

Поскольку функциональность довольно проста, это гибкое решение, потому что это дает вам более глобальный доступ ко всем текстам. Например, позже, если вы понимаете, что вам нужен жирный текст, вам не нужно обновлять всю разметку элементов управления, вы можете изменить свой собственный класс. Для этого есть много преимуществ. Все, что вам нужно сделать, это добавить Refernce в пространстве имен/сборки внутри <pages> элемента конфигурационного файла (с tagPrefix из с) и изменить разметку:

<c:MyLiteral Text="xyz" runat="server" /> 
+0

Это кажется фантастическим решением. Это очень просто реализовать и не имеет тех же ограничений, что и мой общий подход к управлению, сохраняя при этом чистоту viewstate. Благодаря! –