Несвязанное подробное представление не отображается в ASP.NET/VB.NET - PullRequest
1 голос
/ 22 июня 2011

В этом проекте, который я создаю, я создаю макет страницы, которая использует DetailView (то, что я видел в блоге), который, кажется, соответствует моим потребностям.Однако я не хочу, чтобы данные были связаны с чем-либо.

Итак, я добавил элемент управления, а затем начал добавлять в него соответствующие столбцы макета и попытался отобразить элемент управления на тестовой странице.,Где HTML, который должен сгенерировать ASP.NET, это ничего.

Вот мой код (есть «реальный» элемент управления DetailsView, затем кнопка, а затем пустой элемент управления представления «Подробности тестирования»):

<asp:DetailsView ID="DetailsView1" runat="server" 
    Height="184px" Width="271px" EmptyDataText="no data" 
    style="margin-right: 1px">
    <EmptyDataTemplate>
        There is no data.
    </EmptyDataTemplate>
    <FooterTemplate>
        Passenger Details
    </FooterTemplate>
    <Fields>
        <asp:TemplateField HeaderText="Name" SortExpression="Name">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("PassengerName") %>'></asp:TextBox>
            </EditItemTemplate>
            <InsertItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("PassengerName") %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                    ErrorMessage="this field must be filled in " ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
                <br />
                <br />
                <br />
            </InsertItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("PassengerName") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Address">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            </EditItemTemplate>
            <InsertItemTemplate>
                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
                    ErrorMessage="this field must be filled in " ControlToValidate="TextBox2"></asp:RequiredFieldValidator>
            </InsertItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Phone">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
            </EditItemTemplate>
            <InsertItemTemplate>
                <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" 
                    ControlToValidate="TextBox3" ErrorMessage="this field must be filled in "></asp:RequiredFieldValidator>
            </InsertItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label3" runat="server"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Frequent Flyer Number">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
            </EditItemTemplate>
            <InsertItemTemplate>
                <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" 
                    ControlToValidate="TextBox4" ErrorMessage="this field must be filled in "></asp:RequiredFieldValidator>
            </InsertItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label4" runat="server"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField HeaderText="Hello, World." />
    </Fields>
    <HeaderTemplate>
        Passenger Details
    </HeaderTemplate>
</asp:DetailsView>
<asp:Button ID="btnPay" runat="server" Text="Payment page" />
<br />
<asp:DetailsView ID="DetailsView2" runat="server" 
    Height="184px" Width="271px" EmptyDataText="no data" 
    style="margin-right: 1px">
    <EmptyDataTemplate>
        There is no data.
    </EmptyDataTemplate>
    <FooterTemplate>
        Passenger Details
    </FooterTemplate>
    <HeaderTemplate>
        Passenger Details
    </HeaderTemplate>
</asp:DetailsView>

Вот что было сгенерировано:

<div>



</div>

<div>



</div>

    <input type="submit" name="btnPay" value="Payment page" id="btnPay" />

    <br />

<div>



</div>

    <br />

У кого-нибудь есть идеи?В этой среде мы также используем Visual Studio 2008.

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Ваша цель состоит в том, чтобы обмануть asp: DetailsView в отображении самого себя и его полей, даже если вы не собираетесь связывать его с данными. Это можно сделать!

DataTable = New DataTable
DataTable.Rows.Add()
Me.dtlMyDetailView.DataSource = DataTable
Me.dtlMyDetailView.DataBind()

Кроме того, ButtonFields будет генерировать событие ItemCommand, если установлено CommandName. Вы можете использовать IsPostBack или другую логику, чтобы гарантировать отсутствие DataBind, когда вы не хотите и теряете свое состояние просмотра. Вам понадобится ваше представление, если вы собираетесь отвечать на события ItemCommand и использовать значение любого элемента управления в подробном представлении. DataBind сметает это.

0 голосов
/ 22 июня 2011

Метод DataBind элемента управления должен быть вызван, чтобы показать что-либо Следующий aspx ничего не показывает в одиночку

<asp:DetailsView ID="dtsView" runat="server">
            <EmptyDataTemplate>
                THIS IS EMPTY
            </EmptyDataTemplate>
        </asp:DetailsView>

но если он добавит следующий код через c # end

 protected void Page_Load(object sender, EventArgs e)
    {
        dtsView.DataSource = new DataTable();
        dtsView.DataBind();
    }

генерируется следующее

<table cellspacing="0" rules="all" border="1" id="dtsView" style="border-collapse:collapse;">
    <tbody><tr>
        <td>
                THIS IS EMPTY
            </td>
    </tr>
</tbody></table>
...