转发器定位问题中的不同元素

时间:2014-02-27 17:02:57

标签: c# asp.net webforms repeater

我有一个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 总是被放在转发器的顶行。所以按钮,文本框等(真正的任何输入)都可以正确定位。分区,跨度,面板等位于顶部。我的问题是我需要某种面板或跨度,我可以设置样式并将我的各种控件放入其中。救命啊!

1 个答案:

答案 0 :(得分:1)

我将div更改为面板并将以下行添加到样式中以解决问题:

overflow:hidden;

奇怪的是,如果我将它保留为div,它就不起作用,即使Panel只是被渲染为div。怪异。