为什么模板中的ASP元素不存在于当前上下文中?
本文关键字:于当前 不存在 上下文 元素 ASP 为什么 | 更新日期: 2023-09-27 18:11:56
在我的ASPX文件中,我有一个ASP:formview内部的InsertItemTemplate。该模板由asp:文本框、拖拽列表等组成。表单只需要接收用户输入,将其传递给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文本框中的任何一个复制出formview,它们将存在。我想我可以去掉整个模板,但是我想理解上下文问题。
提前感谢。我试图找到一个解释,我发现的大部分不适用或指的是使用。design文件,我没有在这个项目的页面上。
您在模板中使用<%# Bind("...") %>
,因此您不需要手动设置参数。如果调试Sqldatasource1_Inserting
方法,您会注意到参数已经被来自绑定控件的值填充。
模板中的控件不能从代码后端直接访问,因为它们可能不是唯一的。例如,您可能在InsertItemTemplate
和EditItemTemplate
中都有一个ID为"NPI"的TextBox
。