2

C#クラスでaspコントロールのスキンを変更しようとすると、次のエラーが発生します。

'SkinId'プロパティは、静的コントロールのPage_PreInitイベント内またはその前にのみ設定できます。動的コントロールの場合は、プロパティをControlsコレクションに追加する前に設定します。

私の目標は、すべてのページでパネルを提供し、それをID = "response"と呼び、CSSクラスをErrorからSuccess、またはSuccess to Error(つまり、赤または緑)に動的に変更することです。また、応答が作成されるときに、それをvisible=trueにします。

どうやら、私はこれが機能する唯一の方法であるCssClass属性を使用することを余儀なくされています。

補足として: PHPでは、別の「pre-init」「post-init」などを使用しても問題はありません。完全に不要なプロセスです。ユーザーに送り返す前に、HTMLを変更するだけです。ASP.NETがすべてを過度に複雑にすることを決定した理由は少し混乱しています。単にウェブページを表示するためにこれらのさまざまな複雑なプロセスをすべて学ぶのに時間をかけるのは少しばかげています。マイクロソフトで読みにくいASPライフサイクルドキュメントに書かれているすべての癖を学ぶには時間がかかります。マイクロソフトの人々を侮辱することはありませんが、それは実際的ではありません。

4

3 に答える 3

3

静的コントロールの場合、つまり.aspxページでPanelを定義している場合、SkinIdを変更する唯一の場所はPreInitメソッドです。例:

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);
    String panelSkin = ViewState("panelSkin").toString();
    panel1.SkinId = panelSkin;
}

もちろん、PreInitメソッドは、ページが最初に初期化されるときにのみ呼び出されます。PostBackでは呼び出されません。

使用するskinIdをViewStateに保存してから、Response.Redirect( "myPage.aspx")...を呼び出すことができます。上記のように、ViewStateからskinId文字列を取得し、それに応じてPanelのskinIdを設定します。

または、Panelを使用するのではなく、.NetAjaxライブラリのUpdatePanelを使用してみてください。UpdatePanelのボタンをクリックすると(ASyncPostBackをトリガーするように設定されている場合)、OnPreInitメソッドが実行されます。

とはいえ、背景を変更する場合は、CssClassプロパティを使用するのがこれを行う最も効率的な方法です。

于 2011-01-12T22:37:57.797 に答える
1

ASPとその子ASP.NETは、基本的にバニラHTMLとIISページレンダラーの巨大なハックです。PHPのような独自のライフサイクルではなく、IISにすでに存在するライフサイクルのさまざまな段階に接続します。このように、特定の領域でできることがあります。それは、依存することが、変更できるように石に設定されていないか、またはそれらを操作できるようにするためです。.NETクラスおよび.NETFrameworkとの相互運用であるASP.NETの優れた機能である、IMOは、その特異性の一部を補います。

とにかく、スキンはテーマの一部であり、プロセスの早い段階で読み込まれるため、コントロールを適切なデフォルトのスタイルで初期化できます。それが鍵です。テーマはPreInitの後でロックされますが、スキンの背後にあるスタイル(およびCssClasses)は、イベントハンドラー(検証を起動する)を含むPreRenderまで編集可能です。したがって、StyleまたはCssClassを動的に設定します。

完全なポストバックなしでそれを行うには、色を変更する必要があるコントロールをAJAX UpdatePanelに配置できます。これは、ページの他の要素とは別に再レンダリングでき、JavaScriptを介してDOMが変更されるまで現在のコンテンツを保持します。クライアント側。

于 2011-01-12T22:26:29.433 に答える
1

CssClass属性の設定は、PHPで行うものに非常に近いので、それだけではどうでしょうか。

スキンファイルの2つの実際の利点は、すべてのコントロールにデフォルトを設定すること(skinIdをまったく使用しないこと)と、cssで制御できないプロパティを設定することです。

于 2011-01-12T22:37:24.643 に答える