ASP.NET Неправильное обновление Formview

#c# #asp.net

#c# #asp.net

Вопрос:

Я конвертирую свой веб-сайт с классического ASP на ASP.net и, если не считать нескольких ударов, до сегодняшнего дня у меня не было никаких проблем. Но я учусь на лету.

Я пытаюсь обновить запись в formview, и каждый раз, когда я это делаю, я получаю следующую ошибку: «Необходимо объявить скалярную переменную «@FirstName»».

Я погуглил и поискал, и не вижу, что я делаю неправильно. Я уверен, что есть что-то, что я делаю неправильно.

       <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:Table asp:TableRow теги, и т.д. в их эквивалент HTML. Прошло довольно много времени с тех пор, как я в последний раз работал с ASP.NET , но, если я правильно помню, элементы управления каким-то образом плохо взаимодействуют с источниками данных, когда вы помещаете их в некоторые другие серверные элементы управления.

Комментарии:

1. Я ценю помощь. Когда я добавляю это, я больше не получаю ошибку. Но независимо от того, что я помещаю в текстовое поле (txtFirstName), в поле сохраняется нулевое значение.

2. @cunjiva: я обновил ответ выше. Если это не поможет, то я не совсем уверен, какой лучший способ сделать это декларативно. Вы всегда можете передать код, чтобы FirstName параметр обновлялся правильно, но я думаю, вы бы предпочли не делать этого, если это возможно, верно. 🙂

3. Я преобразовал теги asp: Table в HTML, и это сработало! Спасибо. Я также извлек обновленный параметр.