我有一个输入类型文本,在单击 div 后通过 asp.net 动态创建:
divID.innerHtml = "<input type='text' runat='server' id='box' value='' />";
我想要做的是当再次单击 div 时,以获取 asp.net 中文本框的值。
问题是 - 文本框不存在,所以编译器给我一个试图使用它的名字的错误。
有没有办法做到这一点?
我还认为也许有一种方法可以以某种方式使用 jquery 将值传递给 asp.net。
与其将文本框创建为 ,不如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()
。
我建议使用更以 ASP 为中心的方法,例如 Darren 发布的方法。
但是,所有表单输入都会在 PostBack(全部或部分)期间提交以供处理。
因此,如果将名称为 box
1的文本输入控件添加到 HTML form
- 动态地或从先前的请求中 - 则可以通过Request.Form
相应的 PostBack 访问提交的表单值:
string boxValue = Request.Form["box"];
请注意,这只会获取与表单一起提交的值,如果它存在的话;它不会创建任何神奇的代码隐藏对象或以其他方式影响控制树。作为接收新值的副作用,控制树可能会被更改,例如向此 PostBack 页面添加新控件。
1 HTML 表单输入应该有一个 name 属性;id 属性不用于 HTML 表单提交。此外,名称属性可以重复,从而导致“控制数组”。要访问这些作为多个值提交的内容,请使用Request.Form.GetValues(name)。