Почему при перемещении кода GridView в ascx возникает исключение «Выражения привязки данных поддерживаются только для объектов, имеющих событие DataBinding»? - PullRequest
1 голос
/ 20 августа 2010

Я создал 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);

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

1 Ответ

5 голосов
/ 20 августа 2010

Я только что понял - я использовал <%#, когда он должен был быть <%= в объявлении HyperlinkField.

<%# будет пытаться связать данные, и как исключение указывает, что нетпривязка связанных данных для HyperlinkField.Однако <%= просто выполнит код (т.е. вставит текст из константы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...