【问题标题】:Access __VIEWSTATE & __EVENTVALIDATION in C#在 C# 中访问 __VIEWSTATE 和 __EVENTVALIDATION
【发布时间】:2012-10-08 17:03:49
【问题描述】:

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

【问题讨论】:

  • 它们应该在 Request.Form 集合中可用。你试过 Request.Form["__VIEWSTATE"] 和 Request.Form["__EVENTVALIDATION"]
  • Yigit Yener,谢谢你的回答。其实想我有点不一样。我已经改写了我的问题。

标签: c# asp.net viewstate eventvalidation


【解决方案1】:

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

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

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

【讨论】:

  • 乔,感谢您的回复。我正在尝试对输出进行一些重组,这就是为什么我需要访问隐藏字段的原因。我会看看上面提到的方法并回来。
  • 好的,通过上面的方法我可以得到__VIEWSTATE的值了。我仍然不知道 __EVENTVALIDATION ...有什么想法吗?
【解决方案2】:

要获得事件验证,您应该使用 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;
}

【讨论】:

  • jdMiami,感谢您的回答。我很久以前就问过这个问题。让我验证并回复您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
相关资源
最近更新 更多