DataList, условные операторы в <ItemTemplate>? - PullRequest
3 голосов
/ 05 ноября 2008

Я пытаюсь сделать следующее в ASP.NET 3.5. По сути, я связываю LINQDataSource с DataList. Есть свойство под названием «Удалено», и если оно истинно, я хочу отобразить другую разметку. Следующий код выдает ошибки:

<asp:DataList runat="server">
    <ItemTemplate>
        <% If CBool(Eval("Deleted")) Then%> 
            ...
        <% Else%>
            ...
        <% End If%>
    </ItemTemplate>
</asp:DataList>

Возможно ли это? Если нет, каковы альтернативы?

Ответы [ 4 ]

10 голосов
/ 10 июля 2009

Я мог бы посоветовать сохранить передний край кода и записать нужный текст с помощью результата функции:

<asp:DataList runat="server">
    <ItemTemplate>
         <%# GetText(Container.DataItem) %>
    </ItemTemplate>
</asp:DataList>

И код позади:

protected static string GetText(object dataItem)
{        
    if (Convert.ToBoolean(DataBinder.Eval(dataItem, "Deleted"))
        return "Deleted";

    return "Not Deleted";
}

Надеюсь, это поможет.

5 голосов
/ 05 ноября 2008

Одним из вариантов обходного пути может быть использование панели.

<asp:DataList runat="server">
    <ItemTemplate>
        <asp:Panel Visible="<%# Eval("Deleted") %>">
            ...(deleted content here)...
        </asp:Panel>
        <asp:Panel Visible="<%# Not Eval("Deleted") %>">
            ...(other content here)...
        </asp:Panel>
    </ItemTemplate>
</asp:DataList>
1 голос
/ 05 ноября 2008

Возможно, использовать событие ItemDataBound списка данных. Для gridview это событие rowdatabound, которое идеально подходит для изменения отображения значений на основе других значений в наборе результатов. Событие ItemDataBound

Так что, в основном, на предметной привязке вы можете поиграть со своими условными обозначениями. Опять же, это обоснованное предположение, поскольку я обычно делал это с событием RowDataBound в gridview.

1 голос
/ 05 ноября 2008

Почему бы просто не использовать событие RowDataBound и проверить значение ваших полей? RowDatabound идеально подходит для тех ситуаций, когда вы хотите изменить данные в виде сетки на основе значений в наборе результатов.

Событие RowDataBound от MSDN

...