在下面的代码片段中,td标签的宽度百分比属性似乎在Firefox / IE等中被忽略。因此“密码”和文本框都获得了一半的行,这是浪费空间。以下片段是否存在明显错误:
<table align="center" width="80%" cellpadding="0" cellspacing="0" class="loginBg">
<asp:Panel runat="server" ID="pnlLoginIn" style="width:100%;">
<tr>
<td style="padding-left:0px;font-family:Verdana;font-size:70%;width:30%">Username</td>
<td style="padding-right:0px;width:70%" align="left"><asp:TextBox id="txtUsername" runat="server" Width="90px" /></td>
<asp:RequiredFieldValidator ID="rfvUserName" runat="server" ErrorMessage="*" ControlToValidate="txtUsername" ValidationGroup="credentials" Display="Dynamic" />
</tr>
</asp:Panel>
</table>
另外,我正在进行样式排序,因为这是一个非常简单的页面,仅用于在另一个Web应用程序中填充iframe。
提前感谢任何提示。
编辑:添加了一些代码来澄清上下文。
编辑2:我删除了asp:Panel,宽度比例似乎现在正常工作......但仅当iframe或浏览器窗口宽度超过300像素时。在非常小的浏览器窗口/框架中,它强制两个s为50%。真的很奇怪。
答案 0 :(得分:2)
<asp:RequiredFieldValidator>
不应该位于<td>
之一吗?
编辑:<asp:Panel>
和<table>
之间的<tr>
可能没有帮助。也就是说,你的表中不应该有额外的控件/标签。类似于<asp:Panel>
的东西应该包裹整个表格,或者位于<td>
之一。
编辑:简而言之,排列的标签会生成无效的html,所以所有造型投注都会关闭。
答案 1 :(得分:2)
首先,将验证器放在<td>
。
其次 - 检查其他行'<td>
样式中的宽度设置 - 您可能会有冲突。
如果你把textbox
拿出来会发生吗?
答案 2 :(得分:2)
似乎ie和表格宽度不能很好地协同工作。
为了强制执行表的最小宽度,您可以执行的操作是在表中添加一个额外的行,该行跨越所有具有所需最小宽度的列。然后,当调整broswer或iframe很小时,这将强制执行您的td百分比。
像这样:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<style>
.min500
{
width: 500px;
height: 1px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<table align="center" border="1" cellpadding="0" cellspacing="0" class="loginBg">
<asp:Panel runat="server" ID="pnlLoginIn" style="width:100%;">
<tr>
<td colspan="2">
<div class="min500"></div>
</td>
</tr>
<tr>
<td style="padding-left:0px;font-family:Verdana;font-size:70%;width:30%;">
Username
</td>
<td style="padding-right:0px;width:70%;" align="left">
<asp:TextBox id="txtUsername" runat="server" Width="90px" /></td>
<asp:RequiredFieldValidator ID="rfvUserName" runat="server" ErrorMessage="*" ControlToValidate="txtUsername" ValidationGroup="credentials" Display="Dynamic" />
</tr>
</asp:Panel>
</table>
</form>
答案 3 :(得分:0)
我在ASP.NET中遇到了很多问题。在表中使用colgroup标记导致从IIS返回页面源而没有该组。正如你可能猜到的那样,桌子只是做了它想要的东西。在弄清楚问题可能需要runat =&#39;服务器&#39;在colgroup上属于父表的属性,我遇到了no compile situation。最终对我有用的是将所需单元格宽度放在第一行标签上的典型特征。问题:表的第一行真实行包含跨越列的单元格,因此需要一个虚拟行。现在,如何隐藏它?
将表格设置为固定宽度和布局样式:
<tr id="DummyTableRow" style="line-height: 0px" runat="server">
<td style="width: 200px; border: none"> </td>
<td style="width: 200px; border: none"> </td>
<td style="width: 400px; border: none"> </td>
</tr>
然后使用类似这样的第一行来获得最少量的代码(使用与表宽度相加的宽度):
<tr runat="server" style="display: none">
所以其他人不会费心去尝试,一系列失败的尝试:
这不会起作用或尝试使用td标记进行任何组合:
<tr runat="server" visible="false">
这不会起作用或尝试使用td标记进行任何组合:
<tr runat="server" style="visibility: hidden">
这种方法有效,但留下了一个空白行:
int foo(int x)
{
if (x >= 0)
{
return (x - 1) + 2 * foo(x - 1);
}
else
{
return 1;
}
}