传递由用户控件生成的表单字段

时间:2011-12-05 18:37:32

标签: vb.net forms user-controls webforms asp.net-2.0

我在从用户控件组成的发布页面传递表单数据方面遇到了麻烦。

我之前发布过这个问题,Getting form field names on Submit when form is user control,但答案并没有解决我的问题,或者我误解了它们。

让我试着更清楚地解释一下我在做什么。

我有一个向用户显示表单的页面。表格由几个部分组成,但为简单起见,我们会说有两部分。这些部分中的每一部分都是用户控件,因此newSale.aspx的实际标记只是:

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" CodeFile="newSale.aspx.vb" Inherits="newSale_Default"%>
 <%@ Register TagPrefix="controls" TagName="customerForm" Src="~/Controls/customerForm.ascx" %>
 <%@ Register TagPrefix="controls" TagName="itemList" Src="~/Controls/itemList.ascx" %>

 <asp:content id="content1" ContentPlaceHolderID="mainContent" runat="server">
 <div class="content">  
 <form id="newSale" method="post" action="saveSale.aspx">
 <h1>--- New Sale ---</h1>  
    <div class="section" id="customerSection">        
        <controls:customerForm ID='customerForm1' showBankDetails="false" runat='server' />
    </div>
    <div class="section" id="saleSection">       
        <controls:itemList ID='itemList1' showShipping="false" showDeposit="false" runat='server' />        
        <div class="row submitRow">
            <div id="submitSale">Submit</div>
        </div>
    </div>
    </form>    
</div>
</asp:content>

所以你看到我的两个主要Controls标签分别带有ID“customerForm1”和“itemList1”。

提交按钮是故意点击的div,提交由jQuery完成,因此:

$('#submitSale').live('click', function () { $('#newSale').submit(); }); 

当用户控件呈现在浏览器中时,ASP.NET的元素的ID和名称(我理解其原因)是混乱的,所以以一个字段为例:

customerForm控件中包含的名为“name”的字段变为m$mainContent$customerForm1$name

  • 'm' - 作为我的MasterPage的ID
  • 'mainContent' - 作为PlaceHolder的ID
  • 'customerForm1' - 作为用户控件的ID和
  • 'name'是元素的实际名称。

我希望根据上面声明的Form标记的action属性将此表单提交到单独的文件(saveSale.aspx)。

在saveSale.aspx的Code-Behind中,我需要将从表单传递的数据保存到dataBase中,并将其作为HTML页面返回到aspx文件中。

如何在saveSale.aspx(.vb)中可靠地获取提交的表单字段的值?

<%= request.form("m$mainContent$customerForm1$name") %>

有效,但使用起来很自然,特别是当我想将其复制到其他目的时。

m.mainContent.customerForm1.name.selectedValue()

告诉我'm'未被宣布

从其他对我上一个问题的回复中,我尝试在(saveSale.aspx)页面的顶部注册控件,并使用

显式地将Control发布到页面中
<controls:customerForm ID='customerForm1' showBankDetails="false" runat='server' />

哪个不起作用,但即使这样也没用,因为我不想再使用Control了,我只是想从中获取数据。

如果我在这里愚蠢,我会道歉,但我尝试了很多不同的代码和谷歌搜索的想法,但我似乎无法在上面的Request.Form示例之外以任何可扩展的方式工作。

我使用的是.NET 2.0,因此无法使用我在.NET 4.0中提到过的静态客户端功能

另外,请使用VB.NET,如果可以提供帮助,请帮助VB示例。

非常感谢。

0 个答案:

没有答案