2015-01-12 55 views
1

我正在C#/ ASP.net中創建一個新的HtmlGenericControl,並且需要在控件上創建一個沒有值的屬性。這意味着在屬性後面沒有=「」。如何在HtmlGenericControl上創建無價值的屬性

oHtmlGenericControl = new HtmlGenericControl("MyHtmlTag"); 
oHtmlGenericControl.Attributes.Add("MyFirstAttribute", "MyAttributeValue"); 
oHtmlGenericControl.Attributes.Add("MySecondAttribute", ""); 

會產生這樣的事情...

<MyHtmlTag MyFirstAttribute="MyAttributeValue" MySecondAttribute=""></MyHtmlTag > 

而我要的就是這個...

<MyHtmlTag MyFirstAttribute="MyAttributeValue" MySecondAttribute></MyHtmlTag > 

我試圖傳遞null而不是emptry串,但那麼該屬性根本不會出現。

我做了以下思維它是在第一次工作...

oHtmlGenericControl = new HtmlGenericControl("MyHtmlTag"); 
oHtmlGenericControl.TagName = oHtmlGenericControl.TagName + " MySecondAttribute"; 

但它結束了給我這個...

<MyHtmlTag MySecondAttribute></MyHtmlTag MySecondAttribute> 

因此,根據該意見,HTML中可能沒有任何「無價值」屬性。仔細檢查W3C標準,添加需要添加的屬性的正確方法是AttributeName =「AttributeName」。 AttributeName本身被大多數瀏覽器接受並認爲是有效的,但在大多數在線示例中都沒有賦值。

oHtmlGenericControl.Attributes.Add("MyAttributeName", "MyAttributeName"); 

所以上面的例子在我的情況(也可能是所有類似案件)工作,但並不完全回答關於是否可以在不使用HtmlGenericControl添加值的屬性問題。

<MyHtmlTag MyAttributeName="MyAttributeName"></MyHtmlTag> 
+1

你爲什麼要這麼做? HTML中確實沒有無價值的屬性。大多數瀏覽器都會接受它們(例如輸入字段中的「禁用」),但這只是它們的語法約定。寫作'disabled =「true」'是寫HTML的正確方法,就像HTML一樣。 –

+1

@Joonas「checked」就是一個例子 – Crowcoder

+1

是的,瀏覽器會正確評估'checked',即使它不是有效的XHTML,但是寫入它的有效方式是checked ='checked'。 –

回答

0

首先,調查爲什麼你需要一個空屬性。也許你有一個合理的理由,如果是這樣的話(未經測試):

var wr = new System.IO.StringWriter(new StringBuilder("MySecondAttribute")); 
var htw = new HtmlTextWriter(wr); 
oHtmlGenericControl.Attributes.AddAttributes(htw); 
+0

這沒有奏效。 – pdavis

+0

值得一試。它添加了=「」,還是隻是失敗? – Crowcoder

+0

它沒有錯誤,只是沒有添加屬性。 – pdavis