2013-04-19 15 views
7

masterページを使用して変換する既存のASP.Net Webアプリケーションがあります。 これを行う過程で、HTML要素用に生成されたHTML IDの前にContentPlaceHolderのIDが付いていることがわかりました。これは、ContentPlaceHolderのclientidmode = staticを設定したときに期待できることです。 idを利用する既存のクライアントサイドスクリプトがたくさんあるので、この部分はmasterpagesを使用すると壊れてしまい、javascriptをすべて実行してControlを使用してjavascriptを呼び出すことは非常に大きな仕事です。 ClientIDは、その多くがハードコードされているためです。命名コンテナのIDを無効にする/無効にする方法コンテンツページのコントロールIDの生成

プレフィックスを無効にする方法はありますか? ClientIdMode = staticを設定するすべてのコントロールを作成すれば、これを成功させることができますが、もう一度、すべてのコントロールにClientIdMode = staticが設定されていることを確認します。それは可能ですか?または、ContentPlaceHolderのNamingContainerをオーバーライドすることは可能ですか?

プラットフォームは、(以下の答えに記載されるようにweb.configファイル内のClientIDMode =静的有する上記問題点を固定した後).NET 4.0

あり、Iは、「名前」属性があるという問題にぶつかりました自動的に生成され、私がmasterpagesを導入する前のものに設定されていません。これにより、多くのRequest.Form []を持つ既存のサーバーコードに問題が生じます。どのようなベストプラクティスがこの問題を解決するためにここにあるのか?

おかげ ジハード

答えて

7

あなたはページレベルでClientIDModeを持つことができます。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" ClientIDMode="Static" %> 

マスターページレベル:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" ClientIDMode="Static" %> 

とのWeb.Configレベル(すべてのページは、この動作を継承します):

<system.web> 
    <compilation debug="true" targetFramework="4.0"/> 
    <pages clientIDMode="Static"></pages> 
</system.web> 
+1

おかげでたくさんのClientIDModeを使用する必要がありますが、このコードは、任意の.NET Frameworkのバージョンで動作するはずですあなたの答えです。どのように私はそれを逃したのだろうか。 MSDNを介した読み込みclientIdMode = "static"の説明の下で次のようになりました。 "コントロールが名前付けコンテナーである場合、そのコントロールは含まれているコントロールの名前付けコンテナーの階層の先頭として使用されます。それが何を意味するのか説明できますか? 「階層の最上位として使用される」とはどういう意味ですか? ありがとう –

0

.Net Framework 4をターゲットにしておらず、clientIDMode列挙型を使用できない場合は、単にコントロールクラスをオーバーライドできます。ここでHtmlGenericControlとの一例であるが、他のコントロールを行うことができます。

public class NoNamingContainerControl : HtmlGenericControl 
{ 
    public NoNamingContainerControl(string tag) : base(tag) { } 
    public override string ClientID 
    { 
     get 
     { 
      return this.ID; 
     } 
    } 
} 

.NET 4にあなたはおそらく

関連する問題