【发布时间】:2010-09-20 21:31:48
【问题描述】:
在网格视图中,我有以下包含文本框的模板字段
<asp:TemplateField ShowHeader="true" ItemStyle-HorizontalAlign="left" ItemStyle-VerticalAlign="Middle" ItemStyle-Width="106px" HeaderText="Actual Order">
<ItemTemplate>
<asp:TextBox runat="server" ID="txtActualOrder" Columns="4" Text='<%#Eval("QtyOrdered")%>'
CausesValidation="true" onBlur='validate(...)'/>
</ItemTemplate>
</asp:TemplateField>
当用户关闭一个单元格时,我会验证在文本框中输入的数量,如果有效则将文本框的背景颜色更改为黄色,如果无效则更改为红色(在 javascript 中)。
然后我有一个保存按钮,该按钮回发到服务器并循环通过 gridview。我能够从文本框中获取新输入的文本值,但是我不知道单元格已将其背景色更改为黄色。 VS 表示单元格仍为默认值白色。下面的 if 语句总是错误的,VS 调试器说单元格仍然是白色的。有谁知道为什么在回发时我可以获得新的文本值而不是单元格的新背景色?将我的 gridviewrow 记录标记为已授权然后在回发时将该值传递回服务器的最佳方法是什么? 请不要质疑我在客户端验证任何东西的架构是非最佳实践。这是客户的要求。
foreach (GridViewRow row in gvProducts.Rows)
{
TextBox tbActualOrder = (TextBox)row.Cells[3].FindControl("txtActualOrder");
if (tbActualOrder != null)
{
if (tbActualOrder.BackColor != System.Drawing.Color.FromName("yellow"))
{}
}
}
【问题讨论】:
-
如果我理解正确,您的方法并不理想,因为您是在客户端而不是服务器端验证数据。您应该检查此值在服务器上是否有效(如果需要,也可以在客户端)。我不敢相信客户端也会阻止你在服务器端检查它。