0

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

我已经单独测试了 SP,它工作正常。我的问题是asp formviews 和模板对我来说毫无意义。就像字段中输入的数据不存在,所以它没有传递给 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 texbox 中的任何一个从 formview 中复制出来,它们就会存在。我想我可以消除整个模板,但我想了解这个上下文问题。

提前致谢。我试图找到对此的解释,但我发现的大部分内容并不适用或涉及使用 .design 文件,而我在该项目的页面上没有该文件。

4

1 回答 1

1

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

模板中的控件不能从代码隐藏中直接访问,因为它们可能不是唯一的。例如,您可能在 和 中都有TextBox一个 ID 为“NPI”InsertItemTemplateEditItemTemplate

于 2013-05-02T16:16:35.430 回答