asp.net获取尚未创建的文本框的值

时间:2012-12-14 21:19:00

标签: jquery asp.net ajax textbox

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

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

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

问题是 - 文本框不存在,因此编译器在尝试使用其名称时给出了错误。

有办法做到这一点吗?

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

2 个答案:

答案 0 :(得分:0)

不是将文本框创建为HTML,而是创建控件并将其添加到您的页面。

  ''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");

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

答案 1 :(得分:0)

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

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

因此,如果将带有名称 box 1 的文本输入控件添加到HTML form - 动态或从之前的请求 - 然后可以通过相应的PostBack中的Request.Form访问提交的表单值:

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

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


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