Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义Asp.Net复选框_Asp.net - Fatal编程技术网

自定义Asp.Net复选框

自定义Asp.Net复选框,asp.net,Asp.net,我想在Asp.Net C#中创建一个自定义复选框(一个常规复选框,但还有一个属性:布尔LastValue),这样我就可以知道该值在回发后是否发生了更改。你建议的最佳方法是什么 谢谢大家! a假设您正在使用HTML表单,您将希望在表单中创建一个具有类似名称的隐藏字段,用您的lastValue填充它,并选中复选框 <input type="hidden" name="checkboxLastValue" value="true"> 创建从复选框派生的新类,并添加公共属性LastValu

我想在Asp.Net C#中创建一个自定义复选框(一个常规复选框,但还有一个属性:布尔LastValue),这样我就可以知道该值在回发后是否发生了更改。你建议的最佳方法是什么


谢谢大家!

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,我会为每一行做一个输入?别这么想。