Label控件 既强大又好用。为了让它更强大、更好用,我们来写一个继承自Label的控件。 扩展Label控件(1) - 实现回发(Postback)功能
作者: 介绍 扩展Label控件: 通过注册HiddenField控件,使Label控件支持回发(Postback)功能 使用方法(设置属性):EnablePostback - 是否启用Label控件的回发(Postback)HiddenFieldPostfix - 使Label支持回发(Postback)的隐藏控件的后缀名 关键代码ScriptLibrary.js //----------------------------
// http://webabcd.cnblogs.com/ //---------------------------- function yy_sl_copyTextToHiddenField(source, destination)
{
/// <summary>将Label控件的的值赋给隐藏控件</summary>
document.getElementById(destination).value = document.getElementById(source).innerHTML;
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls;
using System.Web.UI;
[assembly: System.Web.UI.WebResource(
"YYControls.SmartLabel.Resources.ScriptLibrary.js",
"text/javascript")]
namespace YYControls
{
/// <summary> /// SmartLabel类,继承自DropDownList /// </summary> [ToolboxData(
@"<{0}:SmartLabel runat='server'></{0}:SmartLabel>")]
[System.Drawing.ToolboxBitmap(
typeof(YYControls.Resources.Icon),
"SmartLabel.bmp")]
public partial
class SmartLabel : Label
{
/// <summary> /// 构造函数 /// </summary> public SmartLabel()
{
}
/// <summary> /// OnPreRender /// </summary> /// <param name="e">e</param> protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
// 实现Label控件的回发(Postback)功能 ImplementPostback();
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Web.UI;
namespace YYControls
{
/// <summary> /// SmartLabel类的属性部分 /// </summary> public partial
class SmartLabel
{
/// <summary> /// 使Label支持回发(Postback)的隐藏控件的后缀名 /// </summary> [
Browsable(
true),
Description(
"使Label支持回发(Postback)的隐藏控件的后缀名"),
Category(
"扩展"),
DefaultValue(
"EnablePostback")
]
public virtual string HiddenFieldPostfix
{
get
{
string s = (
string)ViewState[
"HiddenFieldPostfix"];
return (s ==
null) ?
"EnablePostback" : s;
}
set
{
ViewState[
"HiddenFieldPostfix"] = value;
}
}
/// <summary> /// 是否启用Label控件的回发(Postback) /// </summary> [
Browsable(
true),
Description(
"是否启用Label控件的回发(Postback)"),
Category(
"扩展"),
DefaultValue(
false)
]
public virtual bool EnablePostback
{
get
{
bool? b = (
bool?)ViewState[
"EnablePostback"];
return (b ==
null) ?
false : (
bool)b;
}
set
{
ViewState[
"EnablePostback"] = value;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Web;
namespace YYControls
{
/// <summary> /// SmartLabel类的属性部分 /// </summary> public partial
class SmartLabel
{
/// <summary> /// 实现Label控件的回发(Postback)功能 /// </summary> private void ImplementPostback()
{
if (
this.EnablePostback)
{
// 使Label支持回发(Postback)的隐藏控件的ID string hiddenFieldId =
string.Concat(
this.ClientID,
"_", HiddenFieldPostfix);
// 注册隐藏控件 Page.ClientScript.RegisterHiddenField(hiddenFieldId, "");
// 注册客户端脚本 this.Page.ClientScript.RegisterClientScriptResource(
this.GetType(),
"YYControls.SmartLabel.Resources.ScriptLibrary.js");
// 表单提交前将Label控件的的值赋给隐藏控件 this.Page.ClientScript.RegisterOnSubmitStatement(
this.GetType(),
string.Format(
"yy_sl_enablePostback_{0}",
this.ClientID),
string.Format(
"yy_sl_copyTextToHiddenField('{0}', '{1}')",
this.ClientID,
hiddenFieldId));
}
}
/// <summary> /// 获取或设置 YYControls.SmartLabel 控件的文本内容 /// </summary> public override string Text
{
get
{
try {
if (
this.EnablePostback && !
string.IsNullOrEmpty(HttpContext.Current.Request[
string.Concat(
this.ClientID,
"_", HiddenFieldPostfix)]))
{
// 隐藏控件的值 return HttpContext.Current.Request[
string.Concat(
this.ClientID,
"_", HiddenFieldPostfix)];
}
else {
return base.Text;
}
}
catch {
return base.Text;
}
}
set
{
try {
if (
this.EnablePostback && !
string.IsNullOrEmpty(HttpContext.Current.Request[
string.Concat(
this.ClientID,
"_", HiddenFieldPostfix)]))
{
// 隐藏控件的值 base.Text = HttpContext.Current.Request[
string.Concat(
this.ClientID,
"_", HiddenFieldPostfix)];
}
else {
base.Text = value;
}
}
catch {
base.Text = value;
}
}
}
}
}
本文转自webabcd 51CTO博客,原文链接: http://blog.51cto.com/webabcd/345424
,如需转载请自行联系原作者