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

Reflectorを使用してクラスを見ると、Pageこれらの非表示フィールドがレンダリングフェーズ中に作成されていることがわかります(メソッドRenderViewStateFieldsとを見てくださいEndFormRenderHiddenFields)。

リフレクションを使用して、データの一部またはすべてを取得できる可能性があります(内部プロパティPage.ClientStateなど)。

しかし、私はきれいな解決策があるとは思いません(正直なところ、私はあなたが何を達成しようとしているのか本当に理解していませんが)。

于 2012-10-09T07:54:42.990 に答える
1

イベント検証を取得するには、HTMLAgilityPackを使用する必要があります。

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 に答える