在ASP.NET代码隐藏中访问客户端动态控件

时间:2010-12-04 01:18:43

标签: javascript asp.net

您好我正在尝试访问在事件中动态创建的html控件,但我无法访问它。

我正在使用以下代码使用Javascript在客户端创建元素:

function addInput(field)
{
...declaratives... 

var input = document.createElement("input");
input.id = field+count;
input.name = field+count;
input.type = "text";

... remainder of the code and the element is added to the DOM...

}

我在页面上也有一个服务器控件(一个名为Button1的按钮),我想要做的是当用户点击按钮时我要查看用户已在动态创建中输入的详细信息输入框并将它们存储在数据库中。但是,在事件protected void Button1_Click(object sender, EventArgs e)中,我无法访问输入字段。

这可能吗?

我正在使用VS 2010 C#(v4.0)。

3 个答案:

答案 0 :(得分:7)

你通过JavaScript添加客户端HTML控件 - ASP.NET不会看到它们(它们不是runat = server,这需要渲染时间,而不是在页面加载后)。

你可以做的是为你的所有元素(你已经完成)添加“name”属性,然后当你提交表单(点击按钮)时,你可以通过{{1}检查表单元素收集。

Request.Form

您可能还需要在按钮上设置protected void Button1_Click(object sender, EventArgs e) { var inputValue = Request.Form["someId"]; } ,以便在单击按钮时提交表单。

HTH

答案 1 :(得分:0)

我会确保将输入字段添加到DOM中的现有表单元素。此外,我在过去向表单添加动态输入(文件)控件时遇到了问题,.NET无法看到它们......除非表单中至少有一个静态定义的文件输入。

答案 2 :(得分:0)

动态输入控件仅在至少有1个静态时出现的原因是因为表单需要enctype =“multipart / form-data”来上传文件而asp.net在你有1个静态文件时添加控制。要没有静态文件输入控件,可以在aspx标记或代码隐藏中手动设置表单的enctype =“multipart / form-data”属性:Page.Form.Attributes.Add(“enctype”,“multipart” /格式数据“);