【发布时间】:2011-11-28 18:50:52
【问题描述】:
我正在慢慢地、一点一点地学习我正在使用 ASP.NET 做什么
我已经开始创建新的 Web 应用程序,但我经常遇到 ASP.NET 重命名元素 ID 或在表单字段的情况下重命名它们的名称的问题。
我有一个基本上是销售系统的表格。它本质上由两个用户控件组成,一个是客户详细信息(姓名、地址等)的表单,第二个是客户购买的表单,它由在列出项目时创建的 Javascript 动态创建的数字行组成客户正在购买。
这两个部分都是用户控件,因为它们将用于需要调用/重新输入此数据的系统的其他区域。
加载用户控件时,包含客户名称的字段重命名为"m$mainContent$customerForm$name" 我知道这是从哪里来的,“m”是我的母版页的 ID,“mainContent”是主要内容占位符和"customerForm" 是用户控件的名称。
事实上,就我而言,这在所有形式上始终保持不变,因此相对容易克服......但是......假设它不是
我可以看到有一些方法可以用 Javascript 处理这个问题,但是表单不需要 AJAX 提交,普通的 Post 就可以了,所以当我打开接收页面时,我想调用 @ 987654322@把客户的名字存入数据库,当然我真的需要Request.Form("m$mainContent$customerForm$name")%
我如何从发布表单中动态提取这些前缀,以确保如果我重命名任何内容或在不同的场景中使用它,问题不会破坏它?
我使用的是 .NET 2.0,所以不能使用静态客户端。
【问题讨论】:
-
您是否有特定的原因要使用 Request.Form 来读取值而不是更标准的语法?
-
请提供一些示例代码。如何在 ASPX 页面中声明用户控件?你包括 runat="server" 吗?
-
是的,正在声明用户控件。 Request.Form 有什么问题?
-
当控件在客户端上呈现时,ASP.NET 会更改控件的名称,以免出现命名冲突,正如您所遇到的那样。例如,如果页面上的两个用户控件都有一个名为 txtCustomerName 的文本框。 Request.Form("txtCustomerName") 会参考哪一个?通过使用控件 ID 将控件引用为对象,ASP.NET 处理了如何撤消它在 HTML 中呈现控件时所做的名称修改,因此您不必这样做。此外,将控件作为对象引用可以访问控件的属性和方法。
-
好的,你说的原理我明白了,但是不知道怎么付诸实践。也许我对这一切都错了?基本上,我有一个包含表单的页面。该表单实际上由两部分组成,一部分是“客户”,另一部分是“项目列表”。 “Customer”和“ItemList”都是由
<controls:itemList ID='itemList1' runat='server' />等渲染到浏览器中的用户控件。表单开始标记是<form id="newSale" method="post" action="saveSale.aspx">,显然这个表单标记包含两个用户控件。