Почему элементы 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
,