Доступ к __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;
}
Другие вопросы по тегам