Почему элементы ASP в шаблонах не существуют в текущем контексте?

В моем ASPX-файле у меня есть InsertItemTemplate внутри ASP:formview. Шаблон состоит из формы, созданной с помощью asp:textbox, droplists и т. Д. Форма не собирается ничего, кроме как принять пользовательский ввод, передать его в хранимую процедуру на моем SQL-сервере, и она будет вставлять данные.

Я тестировал SP отдельно, и он отлично работает. Моя проблема в том, что формы и шаблоны asp для меня не имеют смысла. Как будто ввод данных в полях не существует, поэтому он не передается в SP, поэтому ничего не вставляется. Когда я добавляю параметры в свой код, мне говорят, что он не существует в текущем контексте.

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

Код (сокращенно для краткости):

<asp:FormView ID="PatientFormView"
            DataSourceID="Sqldatasource1"    
            Gridlines="Both" 
            runat="server" DefaultMode="Insert" 
    HorizontalAlign="Left" Width="800">
...
Provider Name: <asp:TextBox ID="NPI" runat="server" Width="257px" Text='<%#Bind("npi")%>' Font-Bold="True"></asp:TextBox>
Patient MRN: <asp:TextBox ID="acctno" runat="server" ReadOnly="True" Width="257px" Text='<%#Bind("acctno")%>'></asp:TextBox>

</InsertItemTemplate>

А потом код позади:

protected void Sqldatasource1_Inserting(object sender, SqlDataSourceCommandEventArgs e)
{
    e.Command.Parameters["@NPI"].Value = NPI.Text.ToString();
    e.Command.Parameters["@acctno"].Value = acctno.Text.ToString();
}

Вот где я получаю NPI и acctno не существует в текущем контексте.

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

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

1 ответ

Решение

Вы используете <%# Bind("...") %> внутри шаблона, поэтому вам не нужно устанавливать параметры вручную. Если вы отлаживаете Sqldatasource1_Inserting Метод, вы заметите, что параметры уже заполнены значениями из связанных элементов управления.

Элементы управления в шаблонах не доступны напрямую из кода, поскольку они могут быть не уникальными. Например, вы можете иметь TextBox с идентификатором "NPI" в обоих InsertItemTemplate и EditItemTemplate,

Другие вопросы по тегам