基本上只要是繼承於 Control 型別的控制項都可以跟 *Validator 控制項搭配使用!只是你必須在 UserControl 的類別特別定義 2 個 Class Attribute 才能正確使用。
一個是 [ValidationProperty("Text")] ,而另一個是[ControlValueProperty("Text")] ,分別用來宣告此類別的驗證用屬性要取得此類別的哪一個屬性,與此控制項的 Value 是屬於哪一個屬性。
但其中有個很重要的觀念,就是如果 UserControl 要搭配使用 RequiredFieldValidator 時,若要讓啟用 EnableClientScript 時可以正常運作 ( 也就是直接在 Browser 端直接用 JavaScript 先驗證其值 ),必須在該 UserControl 加上一個隱藏欄位,且以該隱藏欄位的 id 必須以這個UserControl 的 this.ClientID 為名,才能讓 RequiredFieldValidator 控制項透過 JavaScript 取得要驗證的值,且當 UserControl 當中的欄位資料更新的時候,也要立即透過 JavaScript 一併更新該隱藏欄位的值才行!如果不加上這個隱藏欄位並不會出錯,只是做驗證的時候必須要等表單 PostBack 回伺服器端才能驗證而已,但這樣就顯的不有點美中不足了。
以下是個簡單的範例,各位看程式碼就知道我在寫什麼了,注意【粗體字】的部分。
[code:xml]
<%@ Control Language="C#" ClassName="City" CodeFile="City.ascx.cs" Inherits="UserControls_DataType_City" %>
<asp:DropDownList
ID="ddlCity"
runat="server"
EnableViewState="true"
AutoPostBack="false">
</asp:DropDownList>
[/code]
Code Behind 的程式碼如下:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.ComponentModel;
[ValidationProperty("Text"), ControlValueProperty("Text")]
public partial class UserControls_DataType_City : System.Web.UI.UserControl
{
[Bindable(true)]
[Description("台灣縣市")]
[Category("Appearance")]
public string Text
{
get
{
return ddlCity.SelectedValue;
}
set
{
ddlCity.SelectedValue = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddlCity.Items.Add(new ListItem("-- 請選擇 --", ""));
ddlCity.Items.Add(new ListItem("基隆市", "基隆市"));
ddlCity.Items.Add(new ListItem("台北市", "台北市"));
ddlCity.Items.Add(new ListItem("台北縣", "台北縣"));
ddlCity.Items.Add(new ListItem("桃園縣", "桃園縣"));
ddlCity.Items.Add(new ListItem("新竹市", "新竹市"));
ddlCity.Items.Add(new ListItem("新竹縣", "新竹縣"));
ddlCity.Items.Add(new ListItem("苗栗縣", "苗栗縣"));
ddlCity.Items.Add(new ListItem("台中市", "台中市"));
ddlCity.Items.Add(new ListItem("台中縣", "台中縣"));
ddlCity.Items.Add(new ListItem("彰化縣", "彰化縣"));
ddlCity.Items.Add(new ListItem("南投縣", "南投縣"));
ddlCity.Items.Add(new ListItem("雲林縣", "雲林縣"));
ddlCity.Items.Add(new ListItem("嘉義市", "嘉義市"));
ddlCity.Items.Add(new ListItem("嘉義縣", "嘉義縣"));
ddlCity.Items.Add(new ListItem("台南市", "台南市"));
ddlCity.Items.Add(new ListItem("台南縣", "台南縣"));
ddlCity.Items.Add(new ListItem("高雄市", "高雄市"));
ddlCity.Items.Add(new ListItem("高雄縣", "高雄縣"));
ddlCity.Items.Add(new ListItem("屏東縣", "屏東縣"));
ddlCity.Items.Add(new ListItem("台東縣", "台東縣"));
ddlCity.Items.Add(new ListItem("花蓮縣", "花蓮縣"));
ddlCity.Items.Add(new ListItem("宜蘭縣", "宜蘭縣"));
ddlCity.Items.Add(new ListItem("澎湖縣", "澎湖縣"));
ddlCity.Items.Add(new ListItem("金門縣", "金門縣"));
ddlCity.Items.Add(new ListItem("連江縣", "連江縣"));
}
// 為了要讓 RequireFieldValidator 的 EnableClientScript 屬性
// 可以正常運作,需要定義一個以 this.ClientID 為名的欄位,才
// 可以供 Validator 控制項的 JavaScript 做判斷!
Page.ClientScript.RegisterHiddenField(this.ClientID, Text);
ddlCity.Attributes["onchange"] =
"document.getElementById('" + this.ClientID + "').value = this.value;";
}
}
分享到:
相关推荐
C# 使用委托方式Usercontrol与主窗体进行消息传递
WPF自定义控件,UserControl的制作与使用过程,这个例子采用了详细而且简介的方式讲述了WPF自定义控件的制作及调用的全过程,他适合初学者没制作过又想使用WPF自定义控件的程序员。
C# 使用Usercontrol与主窗体进行消息传递,利用Usercontrol里面的控件控制主窗体上的控件;利用主窗体的控件改变Usercontrol里面控件的属性
Form中显示Usercontrol通过委托事件方法实现Form与Usercontrol的数据传递
我开发WPF程序是,喜欢用UserControl来简化WPF,提高重用性。但是有一个问题就是,UserControl里点击了一个按钮后,往往需要操作这个UserControl外的其他控件或者资源。这个如何实现呢? 本文找到了一个简单的方法,...
UserControl for Delphi Seattle
ControlContent中两个UserControl切换特效
UserControl的应用实例,UserControl1.htmlVB源代码
c# winform form页面点击按钮弹出用户控件,选择用户控件中的值并且赋给form页面上的控件
UserControl 2.31 RC1.rar
UserControl for Delphi XE4
asp.net mvc admin user control release dates
在实际工程项目中,XAML程序并不推荐使用继承的方式实现控件,并且由于设计层和逻辑层的分离,导致直接继承UserControl子类并不容易,需要在理解UserControl模板和逻辑树概念的基础上进行代码改写。
c# 测试UserControl内存泄漏 c# 测试UserControl内存泄漏 c# 测试UserControl内存泄漏 c# 测试UserControl内存泄漏 c# 测试UserControl内存泄漏
MasterPage, Page, UserControl 如何互动,传值的例子。网上找到的
Ajax+UserControl+Js实现Igoogle效果
C#自定义控件(usercontrol)--美化单选按钮和复选按钮
WPF的向导示例,是通过UserControl动态加载至主页面,从而使每个向导中的页面可以单独开发。
只要把这个userControl添加到你的website里就可以用了。示例代码: chart1.dataSource = 此处为一个Table。 chart1.Title = "IHC Notebook Products /VPM PSG Team Level of Availablity %(LOS)"; chart1.Caption_...