【问题标题】:.net textbox in gridview, unaware at postback of background-color change from client javascriptgridview中的.net文本框,在回发客户端javascript的背景颜色更改时不知道
【发布时间】: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"))
                                {}
}
}

【问题讨论】:

  • 如果我理解正确,您的方法并不理想,因为您是在客户端而不是服务器端验证数据。您应该检查此值在服务器上是否有效(如果需要,也可以在客户端)。我不敢相信客户端也会阻止你在服务器端检查它。

标签: c# .net gridview textbox


【解决方案1】:

当 POST 发生时,控件的颜色不是提交数据的一部分。您将需要创建一个姐妹隐藏字段来存储有效/无效数据。类似&lt;input type="hidden" name="txtActualOrder_ValidationResults"/&gt;

当然,验证客户端以更新 UI,然后丢弃验证结果并在服务器端重做是执行验证的正确方法。

【讨论】:

  • 感谢帖子的解释。我想太多了,想尝试在 gridview 行中放置一个隐藏字段。相反,我在页面上放置了一个隐藏字段,用于存储对已批准项目的引用,以逗号分隔。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
相关资源
最近更新 更多