asp.net 4に問題があります。
コントロールに属性を追加すると、それがエンコードされてレンダリングされます。
たとえば、このコードを入力すると
txtQuestion.Attributes["onfocus"] =
"if(this.value == this.title)
{
this.value = '';
this.style.backgroundColor='#FEFDE0';
this.style.color='#000000';
}";
私はレンダリングを取得します
onfocus="if(this.value == this.title){this.value =
'';this.style.backgroundColor='#FEFDE0';
this.style.color='#000000';}"
そして、すべての 'ハッシュは& #39;に変更されました。
一部のコントロールでのみ、この新しい未来を無効にする方法はありますか? またはカスタムレンダリングを作成する簡単な方法は?
私の失敗の試み
私はいくつかの考えを試す準備ができていますが、失敗します。たとえば、これは失敗します。
txtQuestion.RenderingCompatibility = new Version("3.5");
また、この属性がレンダリングされ、オンになっているポイントも特定します
public virtual void RenderBeginTag(HtmlTextWriterTag tagKey)関数、
エンコードしたい場合はすべての属性にフラグがありますが、誰でもそれを設定できるかどうかはわかりません。
1 つの回避策
同じ質問のaspネットフォーラムには、グローバルなEncodeTypeを変更する解決策があります-これは私が探している解決策ではありません-そして解決策を提供する人は、これは素晴らしい回避策ではなく、潜在的なセキュリティの問題があると言いますまたはその他のレンダリングの問題。
よろしくお願いします。
ケルヴィン
これまで、Kervin は Microsoft が代わりにこのコマンドを使用することを提案していることに気付きました。
txtQuestion.Attributes["onfocus"] =
"if(this.value == this.title){this.value = '';this.style.backgroundColor='#FEFDE0';this.style.color='#000000';}";
これを使用してください。
Page.ClientScript.RegisterExpandoAttribute(txtQuestion.ClientID, "onfocus",
"if(this.value == this.title){this.value = '';this.style.backgroundColor='#FEFDE0';this.style.color='#000000';}");
そして、MS がレンダリングするものは、ページの最後にあり、JavaScript を使用してこのコントロールに onfocus を追加するスクリプトです。jQuery を使って自分でもそれを行うことができ、おそらくより互換性があります。
これは解決策ですが、属性エンコーディングを回避し、 MS の方法ではなく、自分のやり方でやりたいことを実行できる方法があるかどうかを知りたいと思っています。