Доступ к __VIEWSTATE и __EVENTVALIDATION в C#
В ASP.NET возможно ли получить значения скрытых полей __VIEWSTATE и __EVENTVALIDATION в переменную в C# (на стороне сервера), скажем, переопределив Render
метод?
Я пытался:
protected override void Render(HtmlTextWriter writer)
{
StringBuilder stringBuilder = new StringBuilder();
StringWriter stringWriter = new StringWriter(stringBuilder);
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
base.Render(htmlWriter);
string temp = stringBuilder.ToString();
}
Это дает мне весь вывод ASP.NET. Мы можем получить значения, используя строковую функцию, но я не нашел это очень чистым решением. Есть лучший способ сделать это?
То, что я на самом деле хочу, это значения __VIEWSTATE & __EVENTVALIDATION при первом запросе, а не после выполнения обратной передачи. Это когда выходной поток формируется, когда сделан первый запрос.
2 ответа
Если вы посмотрите на Page
класс с использованием Reflector, вы увидите, что эти скрытые поля создаются во время фазы рендеринга (посмотрите на методы RenderViewStateFields
а также EndFormRenderHiddenFields
).
Вы могли бы получить некоторые / все данные, используя отражение (например, внутреннее свойство Page.ClientState
).
Но я не думаю, что есть чистое решение (хотя, если честно, я не совсем понимаю, чего вы пытаетесь достичь).
Чтобы получить подтверждение события, вы должны использовать HTML Agility Pack.
var eventValidation = HapHelper.GetAttributeValue(htmlDocPreservation, "__EVENTVALIDATION", "value");
public static string GetAttributeValue(HtmlDocument doc, string inputName, string attrName)
{
string result = string.Empty;
var node = doc.DocumentNode.SelectSingleNode("//input[@name='" + inputName + "']");
if (node != null)
{
result = node.Attributes[attrName].Value;
}
return result;
}