У меня есть сайт, что функции некоторые страницы, которые не требуют никакой функциональности обратной передачи. Они просто отображают статический HTML и даже не имеют никакого связанного кода. Однако, так как у Ведущего устройства Page есть a <form runat="server">
тег, который переносит все ContentPlaceHolder
s, получающийся HTML всегда содержит поле ViewState, т.е.:
<input
type="hidden"
id="__VIEWSTATE"
value="/wEPDwUKMjEwNDQyMTMxM2Rk0XhpfvawD3g+fsmZqmeRoPnb9kI="
/>
Править: Я попробовал оба варианта установки EnableViewState
на уровне страницы без удачи вообще:
<%@ Page Language="C#" EnableViewState="false" %>
<%@ Page Language="C#" EnableViewState="true" %>
Я понимаю, это при дешифровании, это значение input
поле соответствует <form>
тег, который я не могу удалить, потому что это находится на моей основной странице. Однако я все еще хотел бы удалить поле ViewState для страниц, которые только отображают статический HTML. Действительно ли это возможно?
Вы можете переопределить рендеринг и вырезать его с помощью регулярного выражения.
Образец по запросу. (NB: накладные расходы на это почти наверняка будут больше, чем любая возможная выгода!)
[редактировать: эта функция также была полезна для удаления всех скрытых полей ввода для использование вывода HTML как документа Word путем изменения MIMEType и расширения файла]
protected override void Render(HtmlTextWriter output)
{
StringWriter stringWriter = new StringWriter();
HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter);
base.Render(textWriter);
textWriter.Close();
string strOutput = stringWriter.GetStringBuilder().ToString();
strOutput = Regex.Replace(strOutput, "<input[^>]*id=\"__VIEWSTATE\"[^>]*>", "", RegexOptions.Singleline);
output.Write(strOutput);
}
В директиве <% @page ... вверху страницы добавьте EnableViewState = "False". Это предотвратит ViewState для этой конкретной страницы.