Объединение строк в атрибутах ASP.NET - PullRequest
4 голосов
/ 27 января 2012

Я пытаюсь объединить строку внутри атрибута. Я получаю ошибку. Я думаю, что это связано с моим Eval. Есть ли правильный способ объединения строк, или это просто невозможно? Я считаю, что проблема в том, где я установил NavigateUrl.

<asp:HyperLink ID="lb" 
               runat="server" 
               Text='<%#Eval("Key.Id") %>' 
               NavigateUrl='ViewItem.aspx?id=' + '<%# Eval("Key.Id") %>'/>

Ответы [ 3 ]

3 голосов
/ 27 января 2012

Краткий ответ: NavigateUrl='<%# Eval("Key.Id", "ViewItem.aspx?id={0}") %>'

Более длинное объяснение:

Проблема в вашем коде в том, что вы используете выражение привязки данных только для части вашего атрибута веб-элемента управления. Вам нужно переместить все внутри выражения привязки данных.

Прежде всего, выражение привязки данных выглядит так:

<%# EXPRESSION %>

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

<asp:HyperLink ID="lb" runat="server" 
  Text='<%# EXPRESSION %>'
  NavigateUrl='<%# EXPRESSION %>' />

Итак, ваш первый атрибут, Text, правильный. Но ваш второй атрибут, NavigateUrl, неверен. Потому что вы положили ViewItem.aspx?id= в качестве значения атрибута, оставив + '<%# Eval("Key.Id") %>' вне любого атрибута, кроме внутри тега управления.

Вот правильный синтаксис:

<asp:HyperLink ID="lb" runat="server" 
  Text='<%# Eval("Key.Id") %>' 
  NavigateUrl='<%# Eval("Key.Id", "ViewItem.aspx?id={0}") %>'/>

Обратите внимание, что мы используем строку формата в качестве второго параметра для Eval(). Это эквивалентно следующему, более явному синтаксису:

<asp:HyperLink ID="lb" runat="server" 
  Text='<%# Eval("Key.Id") %>' 
  NavigateUrl='<%# String.Format("ViewItem.aspx?id={0}", Eval("Key.Id")) %>'/>
1 голос
/ 27 января 2012

Вот что я делаю, когда у меня есть что-то в виде сетки:

<img src='<%# GetDisImageLink(Eval("Disabilities").ToString()) %>' 
   alt="Disabilities" />

[CS code-behind]

public string GetDisImageLink(string dis)
{
    return "../../Content/Images/CardContactInfo/" + 
       (dis.Trim() == "Y" ? "DIS.png" : "Blank.png");
}
0 голосов
/ 27 января 2012

Попробуйте вместо этого:

<asp:HyperLink ID="lb" runat="server" Text='<%#Eval("Key.Id") %>' NavigateUrl='ViewItem.aspx?id=<%# Eval("Key.Id") %>'/>

Вам не нужно объединять

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