none
Как заменить один тег на другой в Razor RRS feed

  • Вопрос

  • в общем такая проблема в зависимости от ситуации нужно тег
    Код HTML
    1
    
    <a></a> 
    заменять на
    Код HTML
    1
    
    <span></span>
    но нужно понимать что внутри этих тегов лежит какой то контент

    Можно ли это реализовать и как?
    18 сентября 2012 г. 7:33

Ответы

  • Можете так, хотя пока я надобности в реальных проектах не встречал.

    @foreach (var item in Model)
    {
    
      if (item == 50)
      {
        <text>@Html.Raw("<span>")</text>
      }
      else
      {
        <text>@Html.Raw("<a href=\"@Url.Action(\"Details\", \"Interactive\", new { id = item.id }, null)\">")</text>
      }
      <text>45465465464</text>
    
      if (item == 50)
      {
        <text>@Html.Raw("</span>")</text>
      }
    
      else
      {
        <text>@Html.Raw("</a>")</text>
      }
    
      }
    }

    • Предложено в качестве ответа YatajgaEditor 19 сентября 2012 г. 9:41
    • Помечено в качестве ответа Abolmasov DmitryModerator 20 сентября 2012 г. 13:48
    18 сентября 2012 г. 18:22
    Модератор

Все ответы

  • Можно и просто:

    @if(true)
    {
      <a></a>
    }
    else
    {
      <span></span>
    }
    

    Вам в условии if нужно поставить своё выражение, а между скобками что хотите.

    18 сентября 2012 г. 8:47
    Модератор
  • Так не катит. Я писал что внутри тегов есть нехилый контент.

    А дублирование контена ой как не айс

    18 сентября 2012 г. 8:55
  • Ставьте контент тудаже, только придерживаясь синтаксиса Razor, это нетрудно. Здесь возможно многое, а что будет дублироваться, я не понял?
    18 сентября 2012 г. 9:00
    Модератор
  • Вот например:

        

    Как я понял Вы хотите посоветовать мне следующее

    @foreach (var item in Model)
    {

    @if(true) {

        <span href="@Url.Action("Details", "Interactive", new { id = item.id }, null)">

            <h2 class="theme hpt">
                @item.theme
            </h2>
            <p>
                @item.post
            </p>
            <div class="Inf"></div>
        </a>

    }

    else{

        <a href="@Url.Action("Details", "Interactive", new { id = item.id }, null)">

            <h2 class="theme hpt">
                @item.theme
            </h2>
            <p>
                @item.post
            </p>
            <div class="Inf"></div>
        </span>

    }

    }

    Я прав? Если да то смотри в IF первом случаи контент дублируется с тем что в ELSE  - а это не круто потому что нужно заменить только тег, а контент внутри может быть и на строк 100 - в случаи если надо будет что-то менять, придется это менять в двух местах, а это уже чревато ошибками, точнее вероятностью совершить ошибку...

    Если я не понял Вас то помогите пожалуйста

    18 сентября 2012 г. 9:08
  • Зачем далеко ходить, можно так:

    @foreach (var item in Model)
    {
      if (true)
      {
        <span href="@Url.Action("Details", "Interactive", new { id = item.id }, null)"></span>
      }
      else
      {
        <a href="@Url.Action("Details", "Interactive", new { id = item.id }, null)"></a>
      }
          <h2 class="theme hpt">
            @item.theme
          </h2>
          <p>
            @item.post
          </p>
          <div class="Inf">
          </div>
    }

    Это с точки синтаксиса, будет верно. Но тег span не может содержать атрибут href.

    • Изменено YatajgaEditor 18 сентября 2012 г. 9:28 Опечатки
    18 сентября 2012 г. 9:15
    Модератор
  • не понял если истина результат будет следующим:

    <span href="@Url.Action("Details", "Interactive", new { id = item.id }, null)"></span>

          <h2 class="theme hpt">
            @item.theme
          </h2>
          <p>
            @item.post
          </p>
          <div class="Inf">
          </div>
        </a>

    если ложь то

    <a href="@Url.Action("Details", "Interactive", new { id = item.id }, null)"> 
    <h2 class="theme hpt">
            @item.theme
          </h2>
          <p>
            @item.post
          </p>
          <div class="Inf">
          </div>
        </a>

    Возникнет же ошибка если  ИСТИННО то у ТЕГА <a> есть только закрывающая её часть а открывающейся нету, тем более там вместо закрывающейся </a> должен быть </sзan> а span закрывающийся в Вашем примере лежит не там где надо, то есть закрывает тег где внутри нет контента

    Или я что то не понимаю

    18 сентября 2012 г. 9:24
  • Опечатался при копировании просто.
    18 сентября 2012 г. 9:27
    Модератор
  • Вы утверждаете, что это будет работать и контент вынесенный из конструкции из и из тегов <A> или <SPAN> при цикле запишется внутрь них ???

    Я не хочу оспорить Ваши знания просто если это получится, просто сейчас кое куда съездить надо, через час проверю. То у меня будет вопрос А КАК ЭТО ТАК РАБОТАЕТ? - ведь по логике вещей и моих познаний RAZOR это работать не должно ...

    18 сентября 2012 г. 9:43
  • А почему это не должно работать? Я уже перестаю понимать Вас.
    18 сентября 2012 г. 9:48
    Модератор
  • Я похоже ввел Вас в заблуждение нужно сократить следующий код

    @foreach (var item in Model)
    {

    @if(true) {

    <span>       

    <h2 class="theme hpt">
                @item.theme
            </h2>
            <p>
                @item.post
            </p>
            <div class="Inf"></div>
        </span>

    }

    else{

    <a href="@Url.Action("Details", "Interactive", new { id = item.id }, null)">       

    <h2 class="theme hpt">
                @item.theme
            </h2>
            <p>
                @item.post
            </p>
            <div class="Inf"></div>
        </a>

    }

    }

    18 сентября 2012 г. 10:53
  • А тут у Вас уже код неверный получается. <h2>, <p> в <span> нельзя вставлять, в <a> также.
    18 сентября 2012 г. 11:30
    Модератор
  • Да суть ни в этом, с разметкой я разберусь, меня интересует техника как это делается, а все остальное формальность которое к делу не относится
    18 сентября 2012 г. 13:41
  • Что вам мешает написать два if - один для открытия тега, другой для закрытия? А все между ними будет одинаково.


    Для связи [mail]

    18 сентября 2012 г. 14:53
    Модератор
  • Это уже интересное замечание. Уже лучше. Но если не ошибаюсь в данном случаи получится дублирование условия для открытия и закрытия, а это тоже не есть cool или я не прав?
    18 сентября 2012 г. 15:18
  • Можете так, хотя пока я надобности в реальных проектах не встречал.

    @foreach (var item in Model)
    {
    
      if (item == 50)
      {
        <text>@Html.Raw("<span>")</text>
      }
      else
      {
        <text>@Html.Raw("<a href=\"@Url.Action(\"Details\", \"Interactive\", new { id = item.id }, null)\">")</text>
      }
      <text>45465465464</text>
    
      if (item == 50)
      {
        <text>@Html.Raw("</span>")</text>
      }
    
      else
      {
        <text>@Html.Raw("</a>")</text>
      }
    
      }
    }

    • Предложено в качестве ответа YatajgaEditor 19 сентября 2012 г. 9:41
    • Помечено в качестве ответа Abolmasov DmitryModerator 20 сентября 2012 г. 13:48
    18 сентября 2012 г. 18:22
    Модератор
  • Да будет дублирование, его тоже при желании можно избежать, но это вы уже перегибаете наверн :)

    Объявите локальную переменную string tag = "", которая будет содержать как тег нужен именно сейчас.

    А закрывайте и открывайте его с помощью Html.Raw("<" + tag + ">") и Html.Raw("</" + tag + ">").

     


    Для связи [mail]

    19 сентября 2012 г. 12:36
    Модератор