自定义Asp.Net复选框
我想在Asp.Net C#中创建一个自定义复选框(一个常规复选框,但还有一个属性:布尔LastValue),这样我就可以知道该值在回发后是否发生了更改。你建议的最佳方法是什么自定义Asp.Net复选框,asp.net,Asp.net,我想在Asp.Net C#中创建一个自定义复选框(一个常规复选框,但还有一个属性:布尔LastValue),这样我就可以知道该值在回发后是否发生了更改。你建议的最佳方法是什么 谢谢大家! a假设您正在使用HTML表单,您将希望在表单中创建一个具有类似名称的隐藏字段,用您的lastValue填充它,并选中复选框 <input type="hidden" name="checkboxLastValue" value="true"> 创建从复选框派生的新类,并添加公共属性LastValu
谢谢大家! a假设您正在使用HTML表单,您将希望在表单中创建一个具有类似名称的隐藏字段,用您的lastValue填充它,并选中复选框
<input type="hidden" name="checkboxLastValue" value="true">
创建从
复选框派生的新类,并添加公共属性LastValue
,确保将LastValue保存到ViewState中
从默认的.ascx文件中,修改为“类名”和“LastValue”属性
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class MyCheckBox : CheckBox
{
protected void Page_Load(object sender, EventArgs e)
{
}
public string LastValue
{
get {
object s = ViewState["LastValue"];
return ( (s == null) ? "" : (string) ViewState["LastValue"] ) ;
}
set { ViewState["LastValue"] = value; }
}
}
}
默认.ascx标记顶部的@页面:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.MyCheckBox" %>
带有包含用户控件的标记的默认aspx页。构建webApp后,控件将自动放置在通用工具箱中,在我的系统上,该工具箱称为“WebApplication1组件”。将控件拖放到默认页面上会创建以下内容:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<%@ Register assembly="WebApplication1" namespace="WebApplication1" tagprefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<cc1:MyCheckBox ID="MyCheckBox1" runat="server" />
</div>
</form>
</body>
</html>
最后一件事:这是为了简单。如果您注意到大多数asp.net web控件(如果不是全部的话)都可以禁用视图状态。大多数时候它都是开着的,但关键是它取决于程序员。只有启用ViewState,保存自定义控件属性的ViewState才会起作用。禁用它并告别LastValue。更好的(正确的?)方法是重写Save/LoadControlState()方法,但这更复杂,所以我将让您决定如何最好地实现您的需求。可以用于查询字符串、持久化cookie或其他,取决于您的需求您是否尝试过使用CheckedChanged
?我不建议为您的需求创建自定义复选框。正如“PiLHA”所评论的,您可以使用查询字符串或隐藏变量。这正是我想要的,但如果我创建了一个类,如何将其添加到设计器中?创建一个用户控件(.ascx),并从复选框而不是WebControl派生它。编译,然后像其他控件不工作一样直接放到页面上。我还创建了一个从复选框派生的类(不是用户控件),但我不能像用户控件那样拖动它。如果创建用户控件,您会注意到默认继承来自System.Web.UI.UserControl
,将其更改为System.Web.UI.WebControls.Checkbox
,并添加该公共属性和编译在查看页面设计器时,您应该在toolboc中看到自定义复选框。我这样做了,但我遇到了以下错误:确保此代码文件中定义的类与“inherits”属性匹配,并且它扩展了正确的基类(例如Page或UserControl)。我从设计器()中删除了代码,但无法将其拖放到页面或工具箱中。我还创建了一个继承复选框的类。这是我想要的,但我无法将其添加到工具箱中。这只是我试图创造的一部分。谢谢你的帖子!如果我有一个有1000行的gridview,我会为每一行做一个输入?别这么想。