10

コードビハインドのヘッドタグにリンクタグを追加するコードを少し書いています...つまり

HtmlGenericControl css = new HtmlGenericControl("link");

css.Attributes["rel"] = "Stylesheet";
css.Attributes["type"] = "text/css";
css.Attributes["href"] = String.Format("/Assets/CSS/{0}", cssFile);

次のようなことを達成しようとする...

<link rel="Stylesheet" type="text/css" href="/CSS/Blah.css" />

これを実現するために HtmlGenericControl を使用しています...私が抱えている問題は、コントロールが最終的に次のようにレンダリングされることです...

<link rel="Stylesheet" type="text/css" href="/CSS/Blah.css"></link>

追加の をレンダリングしないために欠けているものを見つけることができないよう</link>です。オブジェクトのプロパティであると想定しました。

何か不足していますか、それともこのコントロールでは不可能ですか?

ありがとう

4

5 に答える 5

11

から派生させ、メソッドHtmlGenericControlをオーバーライドする必要があると思います。Render

その後、「/>」を自分で書き出すことができます (または、HtmlTextWriter のSelfClosingTagEnd定数を使用できます)。

編集:これが例です(VBで)

于 2009-11-10T13:59:54.067 に答える
9

の回避策を書こうとしているumbraco.library:RegisterStyleSheetFile(string key, string url)ときに、OP と同じ質問になり、次のことがわかりました。

仕様によると、linkタグは void 要素です。コンテンツを持つことはできませんが、自己終了することはできます。<link></link>W3C バリデータは正しい html5 として検証しませんでした。

どうやら

HtmlGenericControl css = new HtmlGenericControl("link");

としてデフォルトでレンダリングされます<link></link>リンクタグに特定のコントロールを使用すると、問題が解決しました:

HtmlLink css = new HtmlLink();

<link/>正しい xhtml および html5 として検証されたマークアップを生成します。

linkに加えて、System.Web.UI.HtmlControlsには、 imginputmetaなど、他の void 要素コントロールのクラスが含まれています。

于 2013-01-02T16:21:46.553 に答える
1

または、を使用することもできますPage.ParseControl(string)。これにより、渡す文字列と同じ内容のコントロールが得られます。

私は実際、現在のプロジェクトでこれとまったく同じことを行っています。もちろん、現在のページ(ハンドラー)への参照が必要ですが、問題は発生しません。

この方法の唯一の注意点は、私が見ているように、コントロールを作成するための「OO」アプローチ(例control.Attributes.Add("href", theValue")など)がないことです。

于 2010-03-18T12:10:19.343 に答える
0

別のフォーラムのRagarathsのコメントに基づいて、このソリューションを作成しました。

http://forums.asp.net/p/1537143/3737667.aspx

これでHtmlGenericControlをオーバーライドします

protected override void Render(HtmlTextWriter writer)
{
    if (this.Controls.Count > 0)
        base.Render(writer); // render in normal way
    else
    {
        writer.Write(HtmlTextWriter.TagLeftChar + this.TagName); // render opening tag
        Attributes.Render(writer); // Add the attributes.  
        writer.Write(HtmlTextWriter.SelfClosingTagEnd); // render closing tag   
    }

    writer.Write(Environment.NewLine); // make it one per line
}
于 2010-03-28T07:48:56.553 に答える