【问题标题】:Unbound DetailsView Not Displaying in ASP.NET/VB.NET未绑定的详细信息视图未在 ASP.NET/VB.NET 中显示
【发布时间】:2011-06-21 23:54:07
【问题描述】:

在我正在创建的这个项目中,我正在创建一个页面模型,该模型使用似乎符合我需要的 DetailView(我在博客中看到的)。但是,我不希望数据绑定到任何东西。

所以,我添加了控件,然后开始向其中添加适当的模型列,并尝试在测试页面上呈现控件。 ASP.NET 应该生成的 HTML 什么都不是。

这是我的代码(有一个“真正的”DetailsView 控件,然后是一个按钮,然后是一个空白测试 Details 视图控件):

<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。

【问题讨论】:

    标签: asp.net vb.net visual-studio-2008 detailsview


    【解决方案1】:

    您的目标似乎是欺骗 asp:DetailsView 显示其自身及其字段,即使您无意将其绑定到数据。 这是可以做到的!

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

    此外,如果设置了 CommandName,ButtonFields 将生成 ItemCommand 事件。 您可以使用 IsPostBack 或其他逻辑来确保在您不想丢失视图状态时不进行 DataBind。如果您打算响应 ItemCommand 事件并在详细信息视图中使用任何控件的值,您将需要您的视图状态。 DataBind 打破了这一点。

    【讨论】:

      【解决方案2】:

      必须调用控件的“DataBind”方法才能显示任何内容。以下aspx单独显示什么

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

      但是如果他通过c#结束添加如下代码

       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>
      

      【讨论】:

        猜你喜欢
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-16
        • 2014-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多