Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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
C# ASP.NET自定义控件和Page.Request.Form[]_C#_Asp.net 2.0_Custom Server Controls - Fatal编程技术网

C# ASP.NET自定义控件和Page.Request.Form[]

C# ASP.NET自定义控件和Page.Request.Form[],c#,asp.net-2.0,custom-server-controls,C#,Asp.net 2.0,Custom Server Controls,我有一个从System.Web.UI.control继承的控件,它包含通用HTML控件,而不是asp.net服务器端控件。我使用Page.Request.Form[Control\u id]获取其中一个控件的值。如果我有一个包含一列自定义控件的gridview,并且我添加了一个新行[row6],然后从第[row3]行上方删除了一行,那么这基本上是可行的,新行[row6变为row5]中的控件假定其正上方的行的值[row5变为row4] 我认为这是因为我使用Page.Request.Form[]获取

我有一个从System.Web.UI.control继承的控件,它包含通用HTML控件,而不是asp.net服务器端控件。我使用Page.Request.Form[Control\u id]获取其中一个控件的值。如果我有一个包含一列自定义控件的gridview,并且我添加了一个新行[row6],然后从第[row3]行上方删除了一行,那么这基本上是可行的,新行[row6变为row5]中的控件假定其正上方的行的值[row5变为row4]


我认为这是因为我使用Page.Request.Form[]获取每个控件的值,但我的控件不知道这些值属于以前占用同一行的控件。我该如何解决这个问题?我希望得到任何建议

您不需要处理
页面.Request.Form
集合。您需要的是一个适当的复合控件。下面是一个简单的例子:

public class InputTextWithLabelControl : CompositeControl {

  HtmlGenericControl _label;
  HtmlInputText _text;

  public string Label {
    get {
      EnsureChildControls();
      return _label.InnerText;
    }
    set {
      EnsureChildControls();
      _label.InnerText = value;
    }
  }

  public string Text {
    get {
      EnsureChildControls();
      return _text.Value;
    }
    set {
      EnsureChildControls();
      _text.Value = value;
    }
  }

  protected override void CreateChildControls() {
    Controls.Clear();

    _label = new HtmlGenericControl("span");
    _label.ID = "label";

    _text = new HtmlInputText();
    _text.ID = "text";

    Controls.Add(_label);
    Controls.Add(_text);
  }

}

您不需要处理
页面.Request.Form
集合。您需要的是一个适当的复合控件。下面是一个简单的例子:

public class InputTextWithLabelControl : CompositeControl {

  HtmlGenericControl _label;
  HtmlInputText _text;

  public string Label {
    get {
      EnsureChildControls();
      return _label.InnerText;
    }
    set {
      EnsureChildControls();
      _label.InnerText = value;
    }
  }

  public string Text {
    get {
      EnsureChildControls();
      return _text.Value;
    }
    set {
      EnsureChildControls();
      _text.Value = value;
    }
  }

  protected override void CreateChildControls() {
    Controls.Clear();

    _label = new HtmlGenericControl("span");
    _label.ID = "label";

    _text = new HtmlInputText();
    _text.ID = "text";

    Controls.Add(_label);
    Controls.Add(_text);
  }

}

我很难理解这一点;你能编辑这个并添加额外的代码来支持这个问题吗?谢谢。我很难理解这一点;你能编辑这个并添加额外的代码来支持这个问题吗?谢谢