【问题标题】:Can't access HTML input controls created in code behind in a literal无法访问在文字后面的代码中创建的 HTML 输入控件
【发布时间】:2015-02-15 04:57:25
【问题描述】:

我有一个 aspx 页面并添加了一个文字控件:

<asp:Literal runat="server" ID="ControlLiteral"></asp:Literal>

然后,在代码隐藏中我使用 for 语句来大规模创建控件,想法是这样的:

ControlLiteral.Text = @"<input  id=""txtMaterial1"" type=""text"" value=""escribe un valor"" disabled=""disabled"" onclick=""somefunction(this)"" style=""width:250px;"" />

然后我想在代码隐藏中的提交按钮后获取值,但问题是我找不到它们,我开始认为代码隐藏不知道这些控件,即使我检查了 HTML 源代码和一切都在那里......有什么想法吗?

我尝试了以下方法:

  1. 在创建控件的字符串中添加了runat="server",当然,它不起作用,它只是在html中添加了文本runat="server"

    李>
  2. Request.Form["txtMaterial"] 或 Request["txtMaterial"] 什么也没找到

  3. Page.Controls.Find("txtMaterial") 返回 null

  4. 当我这样做时,this.from1.Controls.Count 它只检索 11 个控件而不是我在 for 语句中添加的 210 个控件,如果像这样检索它们 this.from1.Controls[2], asp.net引擎创建的那些不相关的html标签

  5. Page.Controls.Count 仅检索 5 个控件

那些控件在一个表里面,不知道它有什么用,所以,你有什么想法吗,自从我上次使用asp.net已经有一段时间了,但记住这是可能的,请让我的了解你的想法,

【问题讨论】:

  • 您不能通过设置 Literal 的文本来创建服务器控件。它不会像您将其添加到 .aspx/ascx 文件中那样进行编译。
  • 不要添加这样的代码,您应该有一个面板或其他占位符,您可以在其中将新控件添加到占位符的 Controls 集合中。这应该在 Page_Init 中完成,以便为回发正确注册控件。
  • @rossisdead 那些不是服务器控件,它们是 HTML 控件...

标签: c# html asp.net dynamic-controls


【解决方案1】:

尝试使用submit 调用javascript 中的函数。

__doPostBack(controlid,json.stringify())

示例:

$scope.btn_generatepdf = function () {
      var myJSON = '';
      for (var i = 0; i < $scope.elements.length; i++) {
           myJSON = myJSON + ($scope.elements[i].value) + '|';
      }
      alert(myJSON);

     __doPostBack('btn_generatepdf1', myJSON);
}    

page_load 代码隐藏:

if (page.ispostback)
{
     string parameter = Request["__EVENTARGUMENT"];
     string[] allParams = parameter.Split('|');
     string val = Request.Params.Get("__EVENTTARGET");
}

【讨论】:

  • 您显示的代码似乎与问题无关。
猜你喜欢
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多