asp.net c# asp:TextBox, How to remove the cols and rows attributes?
我在页面上有一个 asp:TextBox 控件。我将它设置为 TextMode="MultiLine",我没有设置行数或列数。我在 CSS 中为控件设置宽度和高度。
asp.net 仍在添加,我假设是呈现控件上的默认行和列属性。 cols="20" 和 rows="2" 这在任何理智的浏览器中都不是问题,但在 IE 中,CSS 高度被忽略,只显示 2 行空间。
如何防止这些属性出现在呈现的控件上?
编辑:
这仅在兼容模式下的 IE8、IE7 和 IE6 中存在。我不担心 IE6,但 IE7 需要工作。
不要使用
1 | <textarea id="txtContent" runat="server"></textarea> |
外部 CSS(不要混合使用内联和外部 CSS):
1 2 3 4 5 6 7 | .myTextBox { height: 40px; width: 220px; } </asp:TextBox> |
请注意,100% 的高度将为您提供默认的单行高度 - 基本上没有效果。如果你想要多行,那么只需在 CSS 中使用像素。
生成的标记:
1 | <input name="TextBox1" type="text" id="TextBox1" class="myTextBox" /> |
CSS 高度设置可以很好地提供双排效果。
这里最好的方法是以最基本的形式对其进行测试,并在不同的浏览器中逐步增强它。
更新
ASP.NET 使用 CSS 值而不是设置行和列等价物。但是,它仍然在 FF 3.6 和 IE8 中正常工作(在兼容模式下)。为了抑制这些属性,我认为您可能必须创建一个从 TextBox 继承的自定义控件并调整渲染方法。不确定,但您也可以尝试使用 JS 删除这些属性。
多行文本框实际上是一个 HTML
http://www.w3schools.com/TAGS/tag_textarea.asp
1 2 3 4 5 | .myTextBox { height: 100px; width: 220px; } |
以 IE8 兼容模式呈现的 HTML:
1 | <textarea name="TextBox1" rows="2" cols="20" id="TextBox1" class="myTextBox"> |
我可以确认多行功能在 IE8 兼容模式下是正确的。
在 Firefox 中呈现的 HTML:
1 | <textarea name="TextBox1" rows="2" cols="20" id="TextBox1" class="myTextBox"> |
有趣的是,在 VS 2010 的属性窗口中,行和列设置为 "0",但仍然出现在标记中,分别设置为 "2" 和 "20"!这些链接可能会对您有所帮助:
http://dotnet.itags.org/webcontrols/95106/
http://forums.asp.net/t/944368.aspx?Removing Attributes on Rendering WebControllink text
注意:如果您的 doctype 是 XHTML 1.0 Transitional,则需要 textarea 的 rows 和 cols 属性。因此,您可能会发现,在费尽心思创建自定义控件来消除这些属性之后,包含页面将无法验证。
如果您使用文本框的高度和宽度,它可以正常工作。你试过吗?
编辑
当您使用 Width, Height 时,控件会将这些细节作为 Height 和 Width 的样式推送。文本框不直接支持样式属性 AFAIK。
1 | <textarea name="ctl00$MainContent$TextBox1" id="MainContent_TextBox1" style="width: 200px; height: 300px; font-family: Courier New; font-size: larger;" rows="2" cols="20"/> |
当您忽略设置高度和宽度时,它根本不会将宽度和高度添加到您的控件中。如您所见, rows="2" Cols="20" 保持不变。
1 | <textarea name="ctl00$MainContent$TextBox1" id="MainContent_TextBox1" style="font-family: Courier New; font-size: larger;" rows="2" cols="20"/> |