ASP.. NET服务器端验证未触发
本文关键字:验证 NET 服务器端 ASP | 更新日期: 2023-09-27 18:17:29
在我的应用程序服务器端验证功能不工作。甚至函数都没有被调用。我已经把调试器放在那个函数上,但它并没有停止我的调试器。函数没有被调用
<asp:TextBox type="text" ID="txtMobilePhone" runat="server" ClientIDMode="Static" CausesValidation="true"/>
<asp:CustomValidator ID="cvMobilePhone" runat="server" OnServerValidate="cvMobilePhone_ServerValidate"
Text="Mobile Phone already exist in this Reward Program." ErrorMessage="Mobile Phone already exist in this Reward Program."
Display="Dynamic" ValidationGroup="vgStep2" ControlToValidate="txtMobilePhone" CssClass="error"></asp:CustomValidator>
<asp:RequiredFieldValidator ID="rfvMobilePhone" runat="server" ControlToValidate="txtMobilePhone"
ErrorMessage="Mobile Phone is required." CssClass="error" ValidationGroup="vgStep2"></asp:RequiredFieldValidator>
<asp:CustomValidator ID="cvMobilePerVal" runat="server" ClientValidationFunction="validateEmailOrMobilePerVal"
Display="Dynamic" ValidationGroup="vgStep2"></asp:CustomValidator>
<asp:Button ID="btnStep2Upper" runat="server" ClientIDMode="Static" OnClick="btnSaveContactClick" Text="Save" ValidationGroup="vgStep2" vg="vgStep2" OnClientClick="return ClientValidate();" />
服务器端代码
protected void cvMobilePhone_ServerValidate(object source, ServerValidateEventArgs value)
{ /* I have put debugger here but control is not coming here*/
/* my validation logic*/
protected void cvMobilePhone_ServerValidate(object source, ServerValidateEventArgs value)
{
if (txtMobilePhone.Text.Trim() != "")
{
RewardProgramDataContext db = new RewardProgramDataContext();
Boolean f = false;
string MobilePhone = cmnFunc.RemoveMobilePhoneFormat(txtMobilePhone.Text.Trim());
if (Request["id"] != null)
{
var cData = db.spContactSelectAllSingle(new Guid(Request["id"])).SingleOrDefault();
if (cData != null)
{
if (cmnFunc.RemoveMobilePhoneFormat(cData.MobilePhone) == MobilePhone)
{
f = true;
value.IsValid = true;
}
}
}
if (f == false)
{
var res = db.spContactDuplicateMobile(new Guid(ddlContactList.SelectedValue), MobilePhone).SingleOrDefault();
if (res.Column1 <= 0)
{
value.IsValid = true;
customIsValid = true;
}
else
{
value.IsValid = false;
customIsValid = false;
}
}
}
}
现在,当我点击提交按钮时,所有客户端验证工作,但服务器端自定义验证器没有调用
您忘记设置ControlToValidate
属性?
<asp:CustomValidator ID="cvMobilePhone" runat="server" ControlToValidate="txtMobilePhone" OnServerValidate="cvMobilePhone_ServerValidate"
Text="Mobile Phone already exist in this Reward Program." ErrorMessage="Mobile Phone already exist in this Reward Program."
Display="Dynamic" ValidationGroup="vgStep2" CssClass="error"></asp:CustomValidator>
你有两个不同的组合导致这种行为。
首先,请注意,尽管正如其他人所说,您不必指定ControlToValidate
,但这样做会限制服务器端自定义验证事件触发的情况。具体来说,如果你不设置它,事件总是在回发时触发,而如果你设置它,事件只在ControlToValidate
标识的控件具有非空值时触发。
其次,通过指定OnClientClick,你告诉框架你将负责客户端验证,除非你从OnClientClick函数调用它,否则它现在不会触发。虽然你没有在你的问题中包括你的ClientValidate
函数,但我怀疑你没有这样做,这使得你的RequiredFieldValidator
无力阻止回发。
结合起来,这两件事意味着
- 尽管
您可以使用Page_ClientValidate())
从您的自定义函数调用客户端验证,该函数将出现在您的页面脚本中,因为页面包含验证器。
function ClientValidate() {
if (Page_ClientValidate()) {
//do custom validation, maybe return false
return true;
}
else {
return false;
}
}