Я тестировал следующий фрагмент кода, и он работает для меня в IE8 (я ничего не менял):
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<table>
<tr>
<td>
<asp:TextBox ID="PurchaserEmailTextBox" runat="server" CssClass="type-text" />
</td>
<td>
</td>
</tr>
<asp:RequiredFieldValidator ControlToValidate="PurchaserEmailTextBox" ID="RequiredFieldValidator5"
Display="Dynamic" runat="server">
<tr>
<td colspan="2">
<span class="error">You need a purchaser email</span>
</td>
</tr>
</asp:RequiredFieldValidator>
</table>
<asp:Button Text="OK" runat="server" />
</asp:Content>
Однако IE6, FF, Chrome все терпят неудачу, но я думаю, что вы могли бы решить эту проблему, заменив причудливую разметку 'table' на div, например, так:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<div>
<asp:TextBox ID="PurchaserEmailTextBox" runat="server" CssClass="type-text" />
</div>
<asp:RequiredFieldValidator ControlToValidate="PurchaserEmailTextBox" ID="RequiredFieldValidator5"
Display="Dynamic" runat="server">
<div>
<span class="error">You need a purchaser email</span>
</div>
</asp:RequiredFieldValidator>
<asp:Button Text="OK" runat="server" />
</asp:Content>