为什么模板中的ASP元素不存在于当前上下文中?

时间:2013-05-02 16:09:02

标签: c# asp.net formview

在我的ASPX文件中,我在ASP:formview中有一个InsertItemTemplate。该模板由一个由asp:textbox,droplists等组成的表单组成。表单只是取用户输入,将其传递给我的SQL服务器上的存储过程,然后插入数据。

我已经单独测试了SP,它运行正常。我的问题是asp表单和模板对我没有意义。这就像字段中输入的数据不存在,因此它不会传递给SP,因此不会插入任何内容。当我将参数添加到我的代码隐藏时,我被告知它在当前上下文中不存在。

如果我在formview之外复制其中一个完全不变的文本框,它现在神奇地存在于当前上下文中。请原谅我的无知,但如果插入模板无法实际传递要插入的信息,那么它的重点是什么?

代码(简称简称):

<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。

但是,如果我从formview中复制其中任何一个asp texbox,它们将存在。我想我可以删除整个模板,但我想了解这个上下文问题。

提前致谢。我试图找到一个解释,我找到的大部分内容都不适用或者指的是使用.design文件,我在这个项目的页面上没有。

1 个答案:

答案 0 :(得分:1)

您在模板中使用<%# Bind("...") %>,因此您无需手动设置参数。如果您调试Sqldatasource1_Inserting方法,您会注意到参数已经使用绑定控件中的值填充。

模板中的控件无法直接从代码隐藏中访问,因为它们可能不是唯一的。例如,TextBoxInsertItemTemplate中的ID可能为EditItemTemplate,ID为“NPI”。