Передача полей формы, которые были сгенерированы пользовательским элементом управления - PullRequest
1 голос
/ 05 декабря 2011

У меня проблемы с передачей данных формы со страницы публикации, состоящей из пользовательских элементов управления.

Я уже писал этот вопрос здесь, Получение имен полей формы при отправке, когда форма является пользовательским контролем , но ответы не решили мою проблему, или я их неправильно понял.

Позвольте мне попытаться объяснить, что я делаю более четко.

У меня есть страница, которая отображает форму для пользователя. Форма состоит из нескольких разделов, но для простоты мы скажем, что есть два. Каждый из этих разделов является пользовательским элементом управления, поэтому фактическая разметка для 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 с идентификаторами "customerForm1" и "itemList1" соответственно.

Кнопка отправки является намеренно активируемым элементом div, и отправка выполняется с помощью jQuery, таким образом:

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

Когда пользовательские элементы управления отображаются в браузере, идентификаторы и имена элементов путаются (я понимаю причину этого) в ASP.NET, поэтому в качестве примера взяло одно поле:

Поле с именем «name», содержащееся в элементе управления customerForm, становится m$mainContent$customerForm1$name

  • 'm' - это идентификатор моей MasterPage
  • 'mainContent' - это идентификатор PlaceHolder
  • 'customerForm1' - это идентификатор пользовательского элемента управления и
  • 'name' - фактическое имя элемента.

Я хочу отправить эту форму в отдельный файл (saveSale.aspx) согласно атрибуту action моего тега Form, объявленному выше.

В коде файла saveSale.aspx мне нужно сохранить данные, переданные из формы, в базу данных и вернуть их в aspx-файле в виде HTML-страницы.

Как надежно получить значение отправленных полей формы в saveSale.aspx (.vb)?

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

Работает, но, естественно, это неудобно, особенно когда я хочу повторить это для других целей.

m.mainContent.customerForm1.name.selectedValue()

говорит мне, что 'm' не объявлено

и из других ответов на мой предыдущий вопрос я попытался зарегистрировать элементы управления в верхней части страницы (saveSale.aspx) и снова явно разместить элемент управления на странице с помощью

<controls:customerForm ID='customerForm1' showBankDetails="false" runat='server' />

Что не работает, но даже если бы это и сработало, это все равно не имеет смысла, так как я больше не хочу использовать элемент управления, я просто хочу получить от него данные.

Я прошу прощения, если я тут тупой, но я пробовал так много разных вариантов кода и идей Googled, но я не могу заставить эту работу каким-либо масштабируемым способом, кроме примера Request.Form выше.

Я использую .NET 2.0, поэтому не могу использовать функцию статического клиента, о которой я упоминал в .NET 4.0

Также, пожалуйста, я использую VB.NET, поэтому, если вы можете помочь, пожалуйста, помогите с примером VB.

Большое спасибо.

...