Вы можете сделать следующее:
- Есть
<asp:PlaceHolder>
для видео и изображения типа.
- Поместите условие в атрибут
Visible
для каждого <asp:PlaceHolder>
. Измените условие, подходящее для вашего проекта.
Код здесь:
<ItemTemplate>
<asp:PlaceHolder runat="server" Visible='<%# Eval("type") == "video" %>'>
<li>
<video width="320" height="260" controls>
<source src="xyz" type="video/mp4">
Your browser does not support the video tag.
</video>
</li>
</asp:PlaceHolder>
<asp:PlaceHolder runat="server" Visible='<%# Eval("type") == "image" %>'>
<li>
<img src="abc" />
</li>
</asp:PlaceHolder>
</ItemTemplate>
Update: Вы правильно указали, что может привести к возникновению возможных ошибок во время выполнения. Если вы не можете избежать этих ошибок, добавив дополнительные проверки ваших данных, есть вторая альтернатива, но она имеет некоторые ограничения.
Решение должно отображать каждый элемент в коде позади. Для каждого сценария вы создаете функцию, которая возвращает HTML:
protected string RenderVideo(System.Data.DataRow dr)
{
// Get values from the current DataRow
string path = dr["path"].ToString();
// Create the appropriate markup for your video
return "<video>" + "</video>";
}
protected string RenderPhoto(System.Data.DataRow dr)
{
// Get values from the current DataRow
string path = dr["path"].ToString();
// Create the appropriate markup for your video
return "<img src='' alt='' />";
}
Каждая из функций имеет DataRow
в качестве параметра. Тогда все, что вам нужно - это вызвать каждую функцию при необходимости с текущим DataRow
. К текущему DataRow
может быть подключен ((System.Data.DataRowView)GetDataItem()).Row
.
В следующем примере я использую встроенную линию, если вы вызываете правильную функцию.
<ItemTemplate>
<%#(Eval("type") == "video" ? RenderVideo(((System.Data.DataRowView)GetDataItem()).Row) : RenderPhoto(((System.Data.DataRowView)GetDataItem()).Row)) %>
</ItemTemplate>
Альтернатива: Если у вас есть более чем два сценария выше использование строкового если неэффективно. Вы можете сделать следующее, что практически одинаково, но более практично поддерживать.
<ItemTemplate>
<%#(Eval("type") == "video" ? RenderVideo(((System.Data.DataRowView)GetDataItem()).Row) : "") %>
<%#(Eval("type") == "photo" ? RenderPhoto(((System.Data.DataRowView)GetDataItem()).Row) : "") %>
</ItemTemplate>
Ограничение по этому подходу заключается в том, что у вас не может быть элементов управления ASP для каждого элемента.
Как вы можете определить, является ли тип изображения? С этим условием? –
Элемент, связанный с кодом позади, содержит столбец, который указывает, является ли его изображение типа или видео –