Несвязанный DetailsView не отображается в ASP.NET/VB.NET

В этом проекте, который я создаю, я создаю макет страницы, использующей 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.


person Nitrodist    schedule 21.06.2011    source источник


Ответы (2)


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

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

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

person Todd    schedule 27.08.2011

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

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

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

 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>
person Ben    schedule 22.06.2011