【问题标题】:comparevalidation for text box value and hidden field value文本框值和隐藏字段值的比较验证
【发布时间】:2013-04-05 06:50:09
【问题描述】:
<asp:TextBox ID="txtAppSanctionLimit" runat="server" onblur="calcCustDebtEquity()">     </TextBox>
<asp:HiddenField ID="hfAppReqeustAmt" runat="server" Value="0" />

<asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="Proposed Limit is never greater than Request Limit" ControlToCompare="txtAppSanctionLimit"       ControlToValidate="txtRequestLimits" Operator="GreaterThan" 
       ValidationGroup="Report3" Display="none" ></asp:CompareValidator>

<asp:Button ID="btnLimtUpdate" runat="server" Text="Update" ValidationGroup="Report3" 
                onclick="btnLimtUpdate_Click"/>
<asp:ValidationSummary ID="ValidationSummary3" runat="server" ShowMessageBox="true" ShowSummary="false" ValidationGroup="Report3"  />

以上都用在了我在 Visual Studio 2010 下的 defalt.aspx 页面中。 如果 txtAppSanctionLimit 值大于 hfAppReqeustAmt 值,我想显示验证消息。请注意,hfAppReqeustAmt 值是通过查询从数据库中获取的。

我该如何解决这个问题。

【问题讨论】:

  • 你想在按钮的点击事件中显示这个吗?如果是,那么您可以简单地使用 javascript 或 jquery。
  • 您是在浏览器(在客户端)还是在代码隐藏(在服务器)中解决这个问题?
  • 你可以使用范围验证器吗...
  • 我不会完全依赖客户端来执行任何真正的业务逻辑。你有没有理由不把它放在后面的代码中?

标签: c# asp.net validation


【解决方案1】:

接受的答案完全不正确!

简单地说,您不能将 CompareValidator 与 HiddenField 一起使用。您需要使用 CustomValidator。

见:asp:RequiredFieldValidator does not validate hidden fields

【讨论】:

  • 这不是RequiredFieldValidator。
  • 我知道,但如果我没记错的话,逻辑仍然适用
【解决方案2】:

目标的属性

ControlToCompare="txtAppSanctionLimit"  

可能应该指向你的隐藏字段。

ControlToCompare="hfAppReqeustAmt"

并且 ControlToValidate 的属性应该指向您的用户数据输入字段。

ControlToValidate="txtAppSanctionLimit"

因为它当前指向示例代码中未显示的控件。

编辑:根据 MSDN 的 CompareValidator.ControlToCompare -

如果要比较的控件被隐藏或位于容器内(例如 一个面板控件)不可见,验证器执行 仅服务器端验证。验证器客户端脚本仅支持 可见控件。

【讨论】:

  • 见 Nico Westerdale 的帖子。除非使用 CustomValidator,否则不能在验证中使用隐藏字段。
  • @dshapiro - 如果它没有用或明显不正确,我可以删除此答案或将其更改为指向别处。请查看包含的编辑和评论,并提出任何改进建议。
  • MSDN 中的那句话听起来好像应该适用于 HiddenFields,但似乎有一个特定于 HiddenFields 的特殊情况,本文没有提到。我今天遇到了这个问题,如果你使用 asp:HiddenField 作为目标 (ControlToValidate) 或引用 (ControlToCompare),.NET 会抛出一个很大的异常。
  • @dshapiro - 您使用的是哪个 .net 版本?如果我可以重现,我将记录一个连接错误,以至少澄清文档并在此处链接。
  • 我在 .net 4.5.1 下运行的项目中遇到了它,但根据其他发现(通过 Google),我怀疑这可以追溯到更远的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多