マスターページにスクリプトマネージャーがあります。ページ上の他のJavaScriptで問題が発生しているため、webresourse.axdを削除する必要があるコンテンツページが1つまたは2つあります。
これらのページでスクリプトマネージャーを無効にするにはどうすればよいですか?
ScriptManagerオブジェクトには、その仕事をしているように見えるプロパティがないようです。
これは可能ですか?
マスターページにスクリプトマネージャーがあります。ページ上の他のJavaScriptで問題が発生しているため、webresourse.axdを削除する必要があるコンテンツページが1つまたは2つあります。
これらのページでスクリプトマネージャーを無効にするにはどうすればよいですか?
ScriptManagerオブジェクトには、その仕事をしているように見えるプロパティがないようです。
これは可能ですか?
<asp:ScriptManager />を MyScriptManager.ascx などのカスタム コントロールに移動します。.ascx ファイル内の唯一のコードは ScriptManager タグになります。その後、カスタム コントロールのVisibleプロパティを設定して、ScriptManager がレンダリングされるかどうかを制御できます。
<foo:MyScriptManager id="scriptManager" runat="server" Visible="false" />
コンテンツ ページで ScriptManager を表示/非表示にするために使用できるプロパティを MasterPage に追加することもできます。
// In your master page
public bool ShowScriptManager {get; set;}
// In your master page's Page_Load
private void Page_Load(object sender, EventArgs e) {
...
scriptManager.Visible = ShowScriptManager;
...
}
ほとんどのページで ScriptManager が必要になるため、デフォルトを true にすることをお勧めします。マスター ページの Page_Init メソッドのコンストラクターでこれを実行できると思います。
public SiteMaster() {
...
ShowScriptManager = true;
...
}
// Or alternatively
private void Page_Init(object sender, EventArgs e) {
...
ShowScriptManager = true;
...
}
次に、コンテンツ ページで MasterType を設定した場合:
<%@ MasterType VirtualPath="~/path/to/master/page" %>
コンテンツページのPage_Loadで次のようなことをするだけです:
Master.ShowScriptManager = false;
スクリプト マネージャーを ContentPlaceHolder に配置することもできます。
<asp:ContentPlaceHolder ID="cph_ScriptManager" runat="server"></asp:ContentPlaceHolder>
<asp:ScriptManager ID="ScriptManager" runat="server"></asp:ScriptManager>
</asp:ContentPlaceHolder>
削除したいページで asp:Content タグを指定すると、ページから削除されます。
<asp:Content ID="content_SM_Overrride" ContentPlaceHolderID="cph_ScriptManager" runat="server">
<!-- ScriptManager Not Needed on this ASPX -->
</asp:Content>
ここにたどり着いて、まだ UserControl で動作させることができない人のために...
.Net 4.0 を使用している場合は、新しい AjaxFrameworkMode プロパティを使用して Disabled に設定できます。
ScriptManager.AjaxFrameworkMode プロパティ
それが誰かを助けることを願っています!
ネストされたマスターページを使用します。スクリプトマネージャーが配置される追加のコンテンツプレースホルダーを使用してマークアップを行うベースマスター。次に、ネストされたマスターの2つのバージョン。1つはスクリプトマネージャーあり、もう1つはスクリプトマネージャーなしです。また、ページは適切なネストされたマスターページを使用します。
コメントが意味をなすように以下のテキストを残していますが、これは機能しません...
これはどう:
-スクリプトマネージャーを使用したくないURIのリストを使用して、Web構成にアプリ設定を配置します。
-マスターのpage_initイベントハンドラーで、そのコレクションを取得してテストし、現在のページリクエストがリストにあるかどうかを確認します。その場合は、マスターのコントロールコレクションからscriptmanagerを削除します。
つまり、背後のマスターページコードで:
Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
If DirectCast(Page, System.Web.UI.Page).AppRelativeVirtualPath = "~/Test.aspx" Then
Me.Controls.Remove(Me.FindControl("ScriptManager1"))
End If
End Sub
注:あなたがしていることには多くの危険があります。マスターページに更新パネルがある場合、またはマネージャーを削除するページのいずれかに更新パネルがある場合、それらは爆破されます。マスターのコントロールコレクションとマスター初期化のページをループして、更新パネルを確認することもできます。でも、見つけたらどうするかわかりません。それらを削除すると、それらのコンテンツが削除される可能性があります。せいぜい、1)更新パネルが見つかった場合にスクリプトマネージャーを削除しないか、2)エラーをカスタマイズすることができます。