自定义控件校验失效的问题

项目做开发时,使用了一个自定义控件,代码如下:
控件页面段 KnowtypeCtrl.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="KnowtypeCtrl.ascx.cs" Inherits="Controls_WorktypeCrtl" %>
<asp:DropDownList ID="ddlKnowtype" runat="server" CssClass="fixedwidth"></asp:DropDownList>


页面隐藏代码段

[ValidationPropertyAttribute("SelectedValue")]
public partial class Controls_WorktypeCrtl : System.Web.UI.UserControl
{
public string SelectedValue
{
get { return ddlKnowtype.SelectedValue; }
set { ddlKnowtype.SelectedValue = value; }
}
...

}


调用该控件的代码段:

<body>
<form id="form1" runat="server">
<div>

<CustomCtrl:knowtype ID="ddlKnowtype" runat="server" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="ddlKnowtype" runat="server" ErrorMessage="XXX: RequiredFieldValidator" />

<asp:Button id="btnOK" runat="server" Text="确定" Cssclass="botton" OnClick="btnOK_Click"></asp:Button>
</div>


OnClick方法的实现:

//修改确认
protected void btnOK_Click(object sender, EventArgs e)
{
string oper = operate.Value;
switch (oper)
{
case IOperate.ADD://增加操作
onAdd();
break;
case IOperate.EDIT://修改操作
onUpdate();
break;
default:
break;
}
string itemtype = hfItemtype.Value;
Response.Redirect("SubjectiveManage.aspx?itemtype=" + itemtype);
}


这里我利用系统提供的Validator校验自己的控件。
我的设想是,程序在后台执行onclick方法前,会先行校验,就走不到onclick方法了,顺序如下:

web端onclick->后台校验失败->返回web页面

没想到每次点击以后,界面就自动跳转了,似乎校验控件没起作用。

再到btnOK_Click处设置断点,程序确实有调用其代码,这就比较奇怪了,是因为自定义的控件我不小心附上初值了,而导致非空校验失败的吗?

于是我在控件的get方法处设置了断点,发现每次返回的确是空值,这里也没问题,说明包含自定义控件的页面的校验过程应该如下:
web端onclick->后台校验失败->后台继续执行onClick方法->返回web页面

那页面中应该有记录是否校验成功的字段,百度一下,Page.IsValid可以解决此问题。

Asp.net在后台校验不管是否成功,都会响应按钮动作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值