特定のページのViewStateを完全に削除します

asp.net optimization viewstate
特定のページのViewStateを完全に削除します

ポストバック機能を必要としないページがいくつかあるサイトを持っています。 それらは_static_ HTMLを表示するだけで、関連付けられたコードさえありません。 ただし、マスターページには「

すべての「ContentPlaceHolder」をラップするタグ、結果のHTMLには常に* ViewState *フィールドが含まれます。

*編集:*ページレベルで `EnableViewState`を設定する両方のバリエーションを試してみました。

<%@ Page Language="C#" EnableViewState="false" %>
<%@ Page Language="C#" EnableViewState="true" %>

解読すると、この「入力」フィールドの値は「

マスターページにあるため削除できないタグ。 ただし、静的HTMLのみを表示するページのViewStateフィールドを削除したいです。 出来ますか?

  16  1


ベストアンサー

Renderをオーバーライドし、正規表現を使用して削除できます。

要求されたサンプル。 (注:これを行うことのオーバーヘッドは、ほぼ確実に、考えられるあらゆる利点よりも大きいでしょう!)

[編集:この関数は、MIMETypeとファイル拡張子を変更することにより、HTML出力をワードdocとして使用するためにすべての非表示入力ボックスを削除するのにも役立ちました]

protected override void Render(HtmlTextWriter output)
{
    StringWriter stringWriter = new StringWriter();

    HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter);
    base.Render(textWriter);

    textWriter.Close();

    string strOutput = stringWriter.GetStringBuilder().ToString();

    strOutput = Regex.Replace(strOutput, "]*id=\"__VIEWSTATE\"[^>]*>", "", RegexOptions.Singleline);

    output.Write(strOutput);
}

23


ページに次のメソッドを追加します。

        protected override void SavePageStateToPersistenceMedium(object state)
    {
        //base.SavePageStateToPersistenceMedium(state);
    }

    protected override object LoadPageStateFromPersistenceMedium()
    {
        return null; //return base.LoadPageStateFromPersistenceMedium();
    }

    protected override object SaveViewState()
    {
        return null;// base.SaveViewState();
    }

結果:

17


<%@page …​ ページ上部のディレクティブに、EnableViewState = “False”を追加します。 これにより、その特定のページのViewStateが防止されます。

4


Martinが提案した方法は、非常に慎重に使用する必要があります。 Martinが括弧で示したように、ページで予期しない動作を引き起こす可能性があるためです。 実際に経験しました。 しかし、ページからビューステートコンテンツを安全に削除する別のオプションがあります。

このオプションを使用すると、falseを設定せずにビューステートを使用できます。また、ページから削除することもできます。 以下の記事を確認してください。

ダウンロード可能なPeterの記事[1]の下に、zip形式のソリューションファイルがあります。 Peterが参照している2番目の記事を読むことをお勧めします。 これは、その機能を使用しながらビューステートコンテンツをページから削除するのに最適なソリューションです。

3


常にViewStateがあります。 この関連質問を参照してください。

https://stackoverflow.com/questions/283082/why-does-viewstate-hidden-field-gets-rendered-even-when-i-have-the-enableviewst [なぜ__VIEWSTATE隠しフィールドがレンダリングされるのはEnableViewStateをfalseに設定]

2


1


ViewStateは、asp:Formがページに存在する場合にのみ追加されます。 フォームを削除すると、非表示フィールドはレンダリングされません。

注意:これを行うことで、サーバー側のイベントハンドラー、またはあらゆる種類のPostBackイベントを放棄することになります。

0


または、AJAXスタイルのポストバックリクエストを使用している場合は、単純なjQuery行を使用してフィールドを削除します…​

$(".aspNetHidden").remove();

これにより、非表示の__VIEWSTATEフィールドを含むDIVが削除されます。

0


タイトルとURLをコピーしました