给定“仅具有DataBinding事件的对象支持Databinding表达式”异常,为什么将GridView代码移动到ascx?

Ale*_*gas 1 asp.net data-binding user-controls

我用代码创建了一个GridView,并使用DataTable作为其数据源,效果很好。现在,我已将GridView创建的内容移至.ascx文件中,以使其更易于格式化。

由于某种原因,这已经开始触发HttpParseException:

只有具有DataBinding事件的对象才支持数据绑定表达式。System.Web.UI.WebControls.HyperLinkField没有DataBinding事件。

是什么引起了这种差异,我该如何解决?

原始代码:

// Set up columns for datagrid
var boundField = new HyperLinkField
                    {
                        HeaderText = "Title",
                        DataTextField = MembershipCollection.WebTitleColumnName,
                        DataNavigateUrlFields = new[] { MembershipCollection.WebUrlColumnName },
                        DataNavigateUrlFormatString = "{0}"
                    };

// Set up datagrid
_sitesList = new GridView
                {
                    AutoGenerateColumns = false,
                    AllowPaging = true,
                    PageSize = PageSize,
                    EmptyDataText = "No results",
                    Width = new Unit(100, UnitType.Percentage),
                    CellPadding = 2,
                    PagerSettings =
                        {
                            Visible = true,
                            Mode = PagerButtons.NextPrevious,
                            Position = PagerPosition.Bottom,
                            NextPageText = "Next >",
                            PreviousPageText = "< Previous"
                        }
                };
_sitesList.PagerStyle.HorizontalAlign = HorizontalAlign.Center;
_sitesList.RowDataBound += GridView_RowDataBound;
_sitesList.PageIndexChanging += GridView_PageIndexChanging;
_sitesList.Columns.Add(boundField);
Run Code Online (Sandbox Code Playgroud)

.ascx代码:

<asp:ObjectDataSource ID="_sitesDataSource" runat="server"
    SelectMethod="GetSites"
    TypeName="System.Data.DataTable" />
<asp:GridView ID="_sitesGridView" runat="server"
    AutoGenerateColumns="false"
    AllowPaging="true"
    PageSize="<%# this.PageSize %>"
    EmptyDataText="No results"
    width="100%"
    DataSourceID="_sitesDataSource"
    OnRowDataBound="GridView_RowDataBound"
    OnPageIndexChanging="GridView_PageIndexChanging">
    <PagerSettings Visible="true" Mode="NextPrevious" Position="Bottom" NextPageText="Next >" PreviousPageText="< Previous" />
    <PagerStyle HorizontalAlign="Center" />
    <Columns>
        <asp:HyperlinkField
            HeaderText="Title"
            DataTextField="<%# MembershipCollection.WebTitleColumnName %>"
            DataNavigateUrlFields="<%# MembershipCollection.WebUrlColumnName %>"
            DataNavigateUrlFormatString="{0}" />
    </Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

Ale*_*gas 5

我刚刚意识到-我曾经<%#在应该<%=在HyperlinkField声明中使用它。

<%#将尝试进行数据绑定,并且作为异常指示,HyperlinkField没有关联的数据绑定。但是,<%=将仅执行代码(即从常量插入文本)。