0

我有一个输入类型文本,在单击 div 后通过 asp.net 动态创建:

divID.innerHtml = "<input type='text' runat='server' id='box' value='' />";

我想要做的是当再次单击 div 时,以获取 asp.net 中文本框的值。

问题是 - 文本框不存在,所以编译器给我一个试图使用它的名字的错误。

有没有办法做到这一点?

我还认为也许有一种方法可以以某种方式使用 jquery 将值传递给 asp.net。

4

2 回答 2

0

与其将文本框创建为 ,不如HTML创建控件并将其添加到页面中。

IE

  ''IN VB
  Dim tb as New TextBox() with {.ID = "box", .ClientIDMode =  UI.ClientIDMode.Static }

  // In C#
  TextBox tb = new TextBox {
    ID = "box",
     ClientIDMode = UI.ClientIDMode.Static
  };

使用ClientIDMode=Static将确保您在代码隐藏中设置的 ID 将是呈现给 HTML 的 ID,而不是 .net 更改它。

然后将此添加到您的 divID

   divID.Controls.Add(tb)

您现在可以在回发时访问它。在您的回发方法中,您将需要FindControl获取控件 - 这是因为它不是您页面上的已知控件。我在 divID 上使用 FindControl,这将在该 div 内部查找我们之前创建的文本框。

 ''VB
 Dim tb as TextBox = CType(divID.FindControl("box"), TextBox)

 // C#
TextBox tb = (TextBox)divID.FindControl("box");

如果需要,您还可以通过 JQuery 调用来访问此 TextBox 的值$("#box").val()

于 2012-12-14T21:25:06.650 回答
0

我建议使用更以 ASP 为中心的方法,例如 Darren 发布的方法。

但是,所有表单输入都会在 PostBack(全部或部分)期间提交以供处理。

因此,如果将名称为 box1的文本输入控件添加到 HTML form- 动态地或从先前的请求中 - 则可以通过Request.Form相应的 PostBack 访问提交的表单值:

string boxValue = Request.Form["box"];

请注意,这只会获取与表单一起提交的值,如果它存在的话;它不会创建任何神奇的代码隐藏对象或以其他方式影响控制树。作为接收新值的副作用,控制树可能会被更改,例如向此 PostBack 页面添加新控件。


1 HTML 表单输入应该有一个 name 属性;id 属性不用于 HTML 表单提交。此外,名称属性可以重复,从而导致“控制数组”。要访问这些作为多个值提交的内容,请使用Request.Form.GetValues(name)

于 2012-12-14T21:55:51.913 回答