给定以下用户控件标记:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="SearchItem.ascx.cs" Inherits="MyWeb.controls.SearchItem" %>
<div id="container" runat="server" style="height: 100%; width: 100%;">
<div>
<asp:Label ID="lblSearch" runat="server" Text="Search:"></asp:Label>
<br />
<asp:TextBox ID="txtSearch" runat="server"></asp:TextBox>
<input id="btnSearch" type="button" value="Search" onclick="SearchClick(this)" />
</div>
<div>
<asp:Label ID="lblItems" runat="server" Text="Available Items:"></asp:Label>
</div>
<div id="itemContents" runat="server" style="min-height: 50%; width: 100%;border: 1px solid black;">
<asp:ListBox ID="lbxResults" runat="server" SelectionMode="Single" Width="100%" AutoPostBack="True"></asp:ListBox>
</div>
我希望用户控件高度等于占位符高度,列表框可以增长并填充任何高度差,因为所有其他控件的大小都是已知的。一些有用的信息:
高度可以有以下值:300、400、600 px,因此需要列表框高度来补偿任何高度差。
列表框可以包含 0 到 2000 个元素。
占位符可以是 div 或 asp.net 选项卡容器。
出于测试目的,我做了:
创建一个新的用户控件,例如。搜索项.ascx
创建一个默认的 aspx 页面,例如:
a) 添加用户控件 //<%@ 注册 TagPrefix="uc" TagName="SearchItem" Src="~/Controls/SearchItem.ascx" %>
b) 添加到正文
<form id="form1" runat="server">
<div id="ChangeMyHeight" style="height: 300px; width: 30%; float: left;">
<uc:SearchItem ID="AvailableItems" runat="server">
</uc:SearchItem>
</div>
</form>
现在,如果将容器 div 的高度更改为 500、600.(ChangeMyHeight),您将拥有:
当前行为:
- 列表框未正确调整大小。(填补高差)
预期行为:
- 列表框正在正确调整大小并填充高度差。(就像在 Winforms 中对接)
我的首选是 css/jquery 解决方案,但后面的代码也可以(我正在考虑使用 height 属性来设置子控件)
笔记:
- 为简洁起见,示例标记使用样式。
- 示例标记为演示目的硬编码了一些值(因此演示适用于高度 300 像素,但不适用于其他值),请随时根据需要更改样式/html。
- 环境:VS2010/.NET 4.0/jQuery 最新。
- 浏览器:FF、IE7/8/9