Что не так с этой программой связывания данных ASP.net? - PullRequest
0 голосов
/ 21 октября 2019

Я привык записывать данные на стороне клиента, затем с помощью JavaScript проверял и отправлял формы на новую страницу на стороне сервера, которая обновляла базу данных, а затем возвращался снова.

Я думаю, что при программировании на ASP.net не рекомендуется делать это на стороне клиента, потому что безопасность лучше на стороне сервера.

Я пытаюсь сделать это с помощью sqlDataSourcesи DataBinding безуспешно.

На моей странице у меня только два поля ввода. Эти поля пусты.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Prueba.aspx.cs"
    Inherits="MaximaBR.com.Prueba" %>

<!DOCTYPE html>    
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:SqlDataSource id="SqlDataSource1" runat="server"
                DataSourceMode="DataReader"
                ConnectionString="<%$ ConnectionStrings:Data %>"
                SelectCommand="SELECT [idpropiedad],[propietario] 
                               FROM [dbo].[Propiedades] 
                               WHERE [idpropiedad] = 525293">
                <SelectParameters>
                    <asp:ControlParameter name="idpropiedad" 
                        controlid="idpropiedadBox" propertyname="Text" />
                    <asp:ControlParameter name="propietario" 
                        controlid="propietarioBox" propertyname="Text" />
                </SelectParameters>
            </asp:SqlDataSource>
            <asp:TextBox id="idpropiedadBox" runat="server"
                DataSourceID="SqlDataSource1"></asp:TextBox>
            <asp:TextBox id="propietarioBox" runat="server" 
                DataSourceID="SqlDataSource1"></asp:TextBox>
        </div>
    </form>
</body>
</html>

Я прочитал очень много статей по этому поводу, но мое приложение работает на WebForms, а не на mvc, поэтому я хотел бы сделать это следующим образом.

Кроме того,У меня так много полей с отзывчивым html, поэтому мне не нужно использовать gridview.

Мне кажется, что я потерял представление данных, и это то, что мне нужно. Я привык работать с databind в Visual Basic 6.0, но здесь он кажется немного сложным и не может заставить его работать.

Возможно, одна из моих проблем заключается в том, что я не понимаю времена циклов WebFormдля загрузки страницы и других циклов, таких как предварительный рендеринг?

1 Ответ

1 голос
/ 21 октября 2019
  1. Вам необходим серверный элемент управления с привязкой к данным для отображения / редактирования / обновления данных. Для отдельной строки asp:FormView - это нормально.
  2. Вам необходимо привязать дочерние элементы управления к базовым полям. Eval для односторонней привязки, Bind для двусторонней привязки.

Код может выглядеть следующим образом.

<asp:FormView runat="server" DefaultMode="Edit" DataSourceID="SqlDataSource1">
    <EditItemTemplate>
        <asp:TextBox ID="idpropiedadBox" runat="server" Text='<%#Bind("idpropiedad") %>'></asp:TextBox>
        <asp:TextBox ID="propietarioBox" runat="server" Text='<%#Bind("propietario") %>'></asp:TextBox>
        <asp:Button ID="btnUpdate" runat="server" CommandName="Update" Text="Update" />
    </EditItemTemplate>
</asp:FormView>
<asp:SqlDataSource
    ID="SqlDataSource1"
    runat="server"
    DataSourceMode="DataSet"
    ConnectionString="<%$ ConnectionStrings:Data%>"
    SelectCommand="SELECT [idpropiedad],[propietario] FROM  [dbo].[Propiedades] WHERE [idpropiedad] = 525293 "
    UpdateCommand="update [dbo].[Propiedades] set [idpropiedad]=@idpropiedad,[propietario]=@propietario WHERE [idpropiedad] = 525293">
    <SelectParameters>
        <%--no need as select command doesn't have parameters --%>
    </SelectParameters>
    <UpdateParameters>
        <asp:Parameter Name="idpropiedad" Type="Int32" />
        <asp:Parameter Name="propietario" Type="String" Size="1024" />
    </UpdateParameters>
</asp:SqlDataSource>
...