2011-10-07 45 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