如果有将 MVC 用于响应式网站的案例,就是这样:
我正在一个主要是 ASP.NET WebForms 的网站上工作,该网站正在重新设计以使用响应式标记。将所有内容都转换为 MVC 是不切实际的,所以我不得不使用现有的控件。
在特定的表单页面上,我们在同一行上有两个组合框;这些具有适当设置的 CSS 类以指定48%
父元素的宽度。问题在于,由于我们使用的是asp:DropDownListstyle
,因此控件是使用具有的属性呈现的,该属性width:275px;
覆盖了 CSS 类中设置的宽度。
在包含这些 DropDownLists(特别是RenderChildren
方法覆盖)的复合控件的代码隐藏中,我尝试[control].Style.Clear();
在调用基本方法之前调用。这没有效果;甚至添加:
[control].Style.Add(HtmlTextWriterStyle.Width, "inherit");
导致元素呈现为:
<select style="width:275px;width:inherit;" class="input-half first" id="longAndComplicated" name="longAndComplicated">
注意这两个width
声明,理想情况下首先不应该有一个style
属性。
我在反射器的源头戳了一下,找不到这个硬编码宽度的设置位置;我收集到样式设置器是从 ASP.NET 层次结构的某个地方复制而来的。
作为一个幸运的猜测,我尝试了:
- 在(“继承”导致解析错误)上设置
Width
为空字符串<asp:DropDownList>
- 明确指定
Width="48%"
- 环境
EnableTheming="false"
这些都没有任何积极影响,渲染style
属性仍然具有width:275px;
.
这个宽度是从哪里神奇地设置的?我怎样才能覆盖这种行为,理想情况下不必创建继承自的派生类System.Web.UI.WebControls.DropDownList
?
非常感谢。