2011-10-07 86 views
0

我正在将我的网站从经典ASP转换到ASP.net以及几个颠簸之外,直到今天我都没有遇到任何问题。但我正在学习。ASP.NET Formview不正确正在更新

我试图更新formview中的记录,每次我都会出现以下错误:“必须声明标量变量”@FirstName“”。

我已经Google搜索,并且看不到我做错了什么。我确信有一点我做错了。

 <asp:FormView ID="formRecruit" runat="server" DataSourceID="sourceRecruit" 
     EnableModelValidation="True" DataKeyNames="ID"> 
    <ItemTemplate> 
     <asp:Table ID="Table1" Width="100%" runat="server">   
      <asp:TableRow ID="TableRow1" runat="server"> 
       <asp:TableCell Width="50%"> 
       <asp:Table ID="Table2" Width="100%" HorizontalAlign="Center" runat="server"> 
       <asp:TableRow ID="TableRow2" runat="server"> 
       <asp:TableCell> 
       <asp:Table ID="Table3" Width="100%" runat="server"> 
        <asp:TableRow ID="TableRow3" runat="server"> 
         <asp:TableCell>Name:</asp:TableCell> 
         <asp:TableCell><%#Eval("FirstName") %></asp:TableCell> 
         <asp:TableCell><asp:LinkButton runat="server" Text="Edit" CommandName="Edit" ID="LinkButton1" /></asp:TableCell> 
        </asp:TableRow> 
       </asp:Table> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <asp:Table ID="Table1" Width="100%" runat="server">   
      <asp:TableRow ID="TableRow1" runat="server"> 
       <asp:TableCell Width="50%"> 
       <asp:Table ID="Table2" Width="100%" HorizontalAlign="Center" runat="server"> 
       <asp:TableRow ID="TableRow2" runat="server"> 
       <asp:TableCell> 
       <asp:Table ID="Table3" Width="100%" runat="server"> 
        <asp:TableRow ID="TableRow3" runat="server"> 
         <asp:TableCell>Name:</asp:TableCell> 
         <asp:TableCell><asp:TextBox ID="txtFirstName" runat="server" Text='<%#Bind("FirstName") %>'/></asp:TableCell> 
         <asp:TableCell><asp:LinkButton runat="server" Text="Update" CommandName="Update" ID="LinkButton1" /><asp:LinkButton runat="server" Text="Cancel" CommandName="Cancel" ID="LinkButton2" CausesValidation="false" /></asp:TableCell> 
        </asp:TableRow> 
       </asp:Table> 
</EditItemTemplate> 
</asp:FormView> 
<asp:SqlDataSource ID="sourceRecruit" runat="server" 
    ProviderName="System.Data.SqlClient" 
    ConnectionString="<%$ ConnectionStrings:DBCS %>" 
    SelectCommand="SELECT * FROM [Players] WHERE ([ID] = @ID)" 
    UpdateCommand="UPDATE [Players] SET [FirstName] = @FirstName WHERE [ID] = @ID"> 
    <SelectParameters> 
     <asp:QueryStringParameter QueryStringField="ID" Name="ID" Type="Int32" /> 
    </SelectParameters> 
    </asp:SqlDataSource> 

回答

1

不是100%肯定,但要尽量有SqlDataSource这样,看看它的工作原理:

<asp:SqlDataSource ID="sourceRecruit" runat="server" 
    ProviderName="System.Data.SqlClient" 
    ConnectionString="<%$ ConnectionStrings:DBCS %>" 
    SelectCommand="SELECT * FROM [Players] WHERE ([ID] = @ID)" 
    UpdateCommand="UPDATE [Players] SET [FirstName] = @FirstName WHERE [ID] = @ID"> 
    <SelectParameters> 
     <asp:QueryStringParameter QueryStringField="ID" Name="ID" Type="Int32" /> 
    </SelectParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="FirstName" Type="String" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

您也可以尝试转换asp:Tableasp:TableRow标签等,以他们的HTML当量。自从我上次使用ASP.NET以来已经有相当长的一段时间了,但如果我没有记错,那么当您将它们放入其他服务器控件时,控件在某些方面不能很好地与数据源一起使用。

+0

我很感激帮助。当我补充一点时,我不会再犯这个错误。但是不管我放入文本框(txtFirstName),NULL值都保存在字段中。 – cunjiva

+0

@cunjiva:我已经更新了上面的答案。如果这样做没有帮助,那么我不太确定以声明方式做这件事的最好方法是什么。你总是可以手动编写代码,以便正确更新'FirstName'参数,但是如果可能的话,我认为你不希望这样做,对。 :) – Amry

+0

我将asp:Table标记转换为HTML,它工作!谢谢。我也拉了更新的参数。 – cunjiva