2015-07-23 3 views
0

Здравствуйте, под моим кодом.asp: ListView create Case Условие

Я пытаюсь создать веб-часть для sharepoint, где я могу связать несколько типов элементов в слайдере.

У меня есть 2 типа изображения или Видео

И каждый тип имеет различные тег и форматирование. поэтому я не смогу просто привязывать значение к тегам. мой вопрос в том, как я могу создать как «SwiCh case» внутри списка.

if type = image -> привязать тег, привязать второй тег.

<asp:ListView runat="server" ID="lvA"> 
    <LayoutTemplate> 
     <div class="slider"> 
      <ul class="bxslider"> 
       <asp:PlaceHolder runat="server" ID="itemPlaceHolder" /> 
      </ul> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <li> 
      <!-- "tag A" --> 
      <video width="320" height="260" controls> 
       <source src="xyz" type="video/mp4"> 
       Your browser does not support the video tag. 
      </video> 
     </li> 
     <li> 
      <!-- "tag B" --> 
      <img src="abc" /> 
     </li> 
    </ItemTemplate> 
</asp:ListView> 
+0

Как вы можете определить, является ли тип изображения? С этим условием? –

+0

Элемент, связанный с кодом позади, содержит столбец, который указывает, является ли его изображение типа или видео –

ответ

0

Вы можете сделать следующее:

  • Есть <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 для каждого элемента.

+0

, но приведет ли это к ошибке при связывании, так как видимый даже src в img и видео является переменной, которая будет привязана от кода позади и типа в видео. –

+0

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

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