2

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 的值是在发出第一个请求时而不是在回发完成后。那是在发出第一个请求时形成输出流的时间。

4

2 回答 2

1

要获得事件验证,您应该使用 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;
}
于 2014-02-07T18:21:40.967 回答
1

如果您Page使用 Reflector 查看该类,您会看到这些隐藏字段是在渲染阶段创建的(查看方法RenderViewStateFieldsEndFormRenderHiddenFields)。

您可能可以使用反射(例如内部属性Page.ClientState)获取部分/全部数据。

但我不认为有一个干净的解决方案(虽然老实说我并不真正理解你想要实现的目标)。

于 2012-10-09T07:54:42.990 回答