0

如果有将 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

非常感谢。

4

2 回答 2

0

我有更好的想法,固定宽度并且不继承宽度,因为它将从父级继承宽度并覆盖使用宽度定义的宽度元素:275px; 所以这将意义不大。

我创建了一个小提琴,在 chrome 中工作正常,选择标签具有固定宽度,

如果子元素大小会增加,它会自动增长。

请检查fiddle

如果您的问题是指 CSS 类class="input-half first",那么元素样式中定义的样式是最后应用的样式,并且与类相比具有高优先级,更好地创建新类并分配它。

希望,当您参考 ASP.net 控件编写了很多东西时,我已经在正确的上下文中回答了,但我认为在大多数情况下这不应该是问题。

于 2013-05-14T03:55:01.623 回答
0

Doh - 我知道它是什么。

事实证明,包含复合控件沿DropDown1Width和定义属性DropDown2Width。这些“巧妙地”设置了在方法期间使用Width的底层控件的属性。DropDownListDropDownList.Render()

幸运的是,我不必进行子类DropDownList化,但事后看来,缺乏明确的网络搜索结果表明问题可能出在我们自己的代码库中。

我说“已定义”,因为我已经删除了这些冗余属性(以及它们在各种 ASPX 文件中的相应分配)。

于 2013-05-15T06:21:27.860 回答