2009-05-14 4 views
3

Прежде всего, я asp.net n00b, так голый со мной. :)asp: Управление DataList с asp: LinkButton внутри - что-то странно

Я работаю над примерами в книге, пытаясь изучить ASP.NET, и я наткнулся на что-то странное там. Прежде всего, если я напечатаю его так, как написано в книге, VS дает мне ошибки. Это код, как это написано в книге:

<asp:DataList ID="employeesList" runat="server"> 
    <ItemTemplate> 
     <asp:Literal ID="extraDetailsLiteral" runat="server" EnableViewState="false" /> 
     Name: <strong><%#Eval("Name") %></strong><br /> 
     Username: <strong><%#Eval("Username") %></strong><br /> 
     <asp:LinkButton ID="detailsButton" runat="server" Text=<%#"View more details about " + Eval("Name")%> 
      CommandName="MoreDetailsPlease" 
      CommandArgument=<%#Eval("EmployeeID")%> /> 
    </ItemTemplate> 
    <SeparatorTemplate> 
     <hr /> 
    </SeparatorTemplate> 
</asp:DataList> 

Итак, я сорвал у него на некоторое время, и пришел с этим решением, которое на самом деле компилирует:

<asp:DataList ID="employeesList" runat="server" onitemcommand="employeesList_ItemCommand"> 
    <ItemTemplate> 
     <asp:Literal ID="extraDetailsLiteral" runat="server" EnableViewState="false" /> 
     Name: <strong><%#Eval("Name") %></strong><br /> 
     Username: <strong><%#Eval("Username") %></strong><br /> 
     <asp:LinkButton ID="detailsButton" runat="server" Text='View more details about <%# Eval("Name") %>' 
      CommandName="MoreDetailsPlease" CommandArgument='<%Eval("EmployeeID") %>' /> 
    </ItemTemplate> 
    <SeparatorTemplate> 
     <hr /> 
    </SeparatorTemplate> 
</asp:DataList> 

Обратите внимание, что я 've также добавил OnItemCommand в теге asp: DataList, так что теперь я могу запустить событие, как ожидалось.

Однако результаты в браузере не то, что я ожидаю; Имя и Имя пользователя в списке сильного текста показать просто отлично, но Буквальное управление, который должен показать дополнительные детали (поле EmployeeID) и поле Имени внутри LinkButton не будут показывать их значения на странице:

not showing as expected http://lh6.ggpht.com/_x84bQLYH57A/SgxzygartcI/AAAAAAAAAIY/nhT-6RUJa6o/s144/EmployeeDirectory_notshowing.jpg

он должен сказать «EmployeeID: 1» и «Просмотреть более подробную информацию о Zak Ruvalcaba»

Так что я предполагаю, что это функция Eval, что не работает, когда внутри другого элемента управления, может кто-нибудь помочь мне?

Заранее благодарен!

ответ

3

Изменение LinkButton как:

<asp:LinkButton ID="detailsButton" runat="server" 
    Text='<%# Eval("Name", "View more details about {0}") %>' 
    CommandName="MoreDetailsPlease" 
    CommandArgument='<%# Eval("EmployeeID") %>' /> 

К сожалению, я перепутал порядок параметров. Я обновил свой ответ. Формат должен быть вторым параметром.

+0

Это решение заставляет приложение сбой, говоря DataBinding: «System.Data.Common.DataRecordInternal» не содержит свойства с именем «Посмотреть более подробную информацию о {0}». Не могли бы вы снова взглянуть на него? Надеюсь, это способ сделать это, поскольку он выглядит довольно элегантным. :) – tplive

+0

Половина точки для определения отсутствующих # в CommandArgument ..;) – tplive

+0

Я даю вашему обновленному решению ответ, поскольку он ИМХО более изящный. Но TheTXI тоже заинтересовался, поэтому я поддержал его. Надеюсь, я делаю это правильно, я новичок в SO! Спасибо, ребята, за ваши ответы! – tplive

1

Вы можете посмотреть другой вопрос, который я отправил вчера о чем-то устрашающе подобное здесь:

Need help with Eval inside DataList

Я верю Canavar фактически дал правильный ответ, однако.

+0

Ваша ссылка была интересной, я понятия не имел, что возвращение из Eval было объектом, но когда я применил ваше решение, вот так: Текст = '<% # "Подробнее о" + Eval ("Name"). ToString() + ""%>' работает как шарм! – tplive

+0

tplive: не стесняйтесь проголосовать за меня (и, возможно, мой оригинальный вопрос), если это помогло :) – TheTXI

Смежные вопросы