当表单是用户控件时,在提交时获取表单字段名称

时间:2011-11-28 18:50:53

标签: asp.net vb.net forms

我慢慢地,逐步了解我在使用ASP.NET做什么

我已经创建了我的新Web应用程序的开头,但我经常遇到ASP.NET重命名元素ID的问题,或者在表单字段的情况下,它们的名称。

我有一个基本上是销售系统的表格。它基本上由两个用户控件组成,一个是客户详细信息的表单(名称,地址等),第二个是客户购买的表单,它由在列出项目时创建的Javascript动态创建的数字行组成顾客正在购买。

这两个部分都是用户控件,因为它们将用于需要调用/重新输入此数据的系统的其他区域。

加载USer Control时,包含客户名称的字段将重命名为"m$mainContent$customerForm$name"我了解其来源,“m”是我的母版页的ID,“mainContent”是主要内容占位符和“customerForm”是用户控件的名称。

事实上,在我的情况下,这在所有形式上总是保持不变,所以它相对容易克服......但是......假设它不是

我可以看到有很多方法可以用Javascript处理这个问题,但是表单不需要AJAX提交,普通的Post会对此做好,所以当我打开收到的页面时我想调用{ {1}}将客户的名字保存到数据库中,当然我真的需要Request.Form("name")%

如何从发布表单动态提取这些前缀,以确保如果我重命名任何内容或在不同场景中使用它,问题不会破坏它?

我使用的是.NET 2.0,因此无法使用静态客户端。

3 个答案:

答案 0 :(得分:3)

这已经很老了,但让我们看看它对你有用。

获取this示例我设法从没有前缀的给定字段名称中获取值。

我确信这不是最好的解决方案,但它对我有用。假设您要恢复名为“hfIdAviso”的字段的值,该字段在POST中显示为“ctl00 $ body $ hfIdAviso”:

var value = Request.Form.Cast<string>()
                    .Where(key => key.EndsWith("hfIdAviso"))
                    .ToDictionary(key => key, key => Request.Form[key])
                    .Values.FirstOrDefault();

这将返回该字段的值。

希望它有所帮助。

答案 1 :(得分:1)

如果在ASPX页面的用户控件声明中包含runat =“server”,则只需使用控件的ID值即可访问此控件。

例如 在ASPX中:

<uc:MyUserControl ID="mycontrol1" runat="server" />

在后面的代码中(用C#语法):

object foobar = mycontrol1.SelectedValue;

答案 2 :(得分:0)

假设您在用户控件中有一个表单,其中有一个带有ID =&#34; txtfname&#34;的TextBox字段。您已在第1页中注册了您的用户控件,并且您希望将表单数据发布到第2页:

第1页中的

您拥有用户控制权:

<My:WebUserControl1 ID="myuc" runat="server" />

在第2页代码隐藏中,您可以通过这种方式获取用户控件表单字段(txtfname)的值:

string firstName = Request.Form["myuc$txtfname"];