我有一个webforms项目,并且是转发器控件的新手,并注意到基于元素类型的一些非常奇怪的定位行为。我不确定这只是我还是什么。在我的项目模板中,我有一个链接按钮和一个带有几个控件的div(我在div和文本框上设置这样的样式就像这样故意突出问题):
<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="repeater_cmd" >
<ItemTemplate>
//this link button sets the visibility of the div below
<asp:LinkButton id ="clr_div" CommandName="nav-to-page" runat = "server">
</asp:LinkButton>
//this div has its visibility set by the link button
<div ID="rdiv" runat= "server" style = "width:700px; background:white; height:100px;">
<asp:TextBox ID="text1" style = "width:700px;height:1px;" runat="server">
</asp:TextBox>
</div>
</ItemTemplate>
</asp:Repeater>
我的项目命令:
protected void repeater_cmd(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "nav-to-page")
{
//hide any open divs
for (int i = 0; i < Repeater1.Items.Count; i++)
{
RepeaterItem item = Repeater1.Items[i];
item.FindControl("rdiv").Visible = false;
}
//then show our div
e.Item.FindControl("rdiv").Visible = true;
}
}
现在是奇怪的部分 - 无论我点击哪个链接按钮, div显示在转发器顶部的链接按钮后面,文本框显示在链接按钮的正下方我点击了! 我只想让我的整个div显示在我刚刚点击的按钮下面。更糟糕的是,如果我看一下标记,它会说文本框是里面的 div,但它显然不会那样呈现。页面来源显示:
<div id="rdiv" style="width:700px; background:white; height:100px;">
<input name="ctl00$DetailsBoxHolder$Repeater1$ctl11$text1" type="text" id="text1" style="width:700px;height:1px;" />
</div>
页面上显示的内容(顶部链接按钮后面的div,点击链接按钮下方的文本框:
---- ---- ----
....- -....- -....- -....
. - - - - - - .
....- -....- -....- -....
---- ---- ----
---- ---- ----
- - - - - -
- - - - - -
- - - - - -
---- ---- ----
...........................
. .
...........................
我注意到,无论项目是呈现为内联元素还是块级元素,所有元素都具有一些本机回发或输入属性,无论它是否为s being used, get positioned correctly whereas those that don
t
总是被放在转发器的顶行。所以按钮,文本框等(真正的任何输入)都可以正确定位。分区,跨度,面板等位于顶部。我的问题是我需要某种面板或跨度,我可以设置样式并将我的各种控件放入其中。救命啊!
答案 0 :(得分:1)
我将div更改为面板并将以下行添加到样式中以解决问题:
overflow:hidden;
奇怪的是,如果我将它保留为div,它就不起作用,即使Panel只是被渲染为div。怪异。