项目做开发时,使用了一个自定义控件,代码如下:
控件页面段 KnowtypeCtrl.ascx:
页面隐藏代码段
调用该控件的代码段:
OnClick方法的实现:
这里我利用系统提供的Validator校验自己的控件。
我的设想是,程序在后台执行onclick方法前,会先行校验,就走不到onclick方法了,顺序如下:
web端onclick->后台校验失败->返回web页面
没想到每次点击以后,界面就自动跳转了,似乎校验控件没起作用。
再到btnOK_Click处设置断点,程序确实有调用其代码,这就比较奇怪了,是因为自定义的控件我不小心附上初值了,而导致非空校验失败的吗?
于是我在控件的get方法处设置了断点,发现每次返回的确是空值,这里也没问题,说明包含自定义控件的页面的校验过程应该如下:
web端onclick->后台校验失败->后台继续执行onClick方法->返回web页面
那页面中应该有记录是否校验成功的字段,百度一下,Page.IsValid可以解决此问题。
Asp.net在后台校验不管是否成功,都会响应按钮动作。
控件页面段 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在后台校验不管是否成功,都会响应按钮动作。