2017-10-16 4 views
-2

J'ai ceci:chaîne Encode rasoir HTML Asp.NET MVC

@model IEnumerable<MVPTracker.Models.DashboardResult> 
@using MVPTracker.Models; 

@{ 
int row = 0; 
ViewBag.Title = "DashboardList"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
string top = "<div class='row'> "; 
string Bot = "</div> "; 
} 

<div class="wrapper wrapper-content animated fadeInRight"> 
<div class="row"> 
    <div class="col-lg-12"> 
     <div class="ibox float-e-margins"> 
      <div class="ibox-content"> 
       <div class="wrapper wrapper-content animated fadeInRight"> 
        @{ 
         foreach (var item in Model) 
         { 
          if (row == 0) 
          { 
           Html.Encode(top);  
          } 
          <div class="col-md-3"> 
           <div class="ibox"> 
            <div class="ibox-content product-box"> 
             <div class="product-imitation"> 
              <img src="~/Images/App/EventHeader.jpg" width="100%" /> 
             </div> 
             <div class="product-desc"> 
              <span class="product-price"> 
               @Html.DisplayFor(modelItem => item.Sport.Name) 
              </span> 
              <a href="@Url.Action("ViewResults", "Results", new { key = Functions.encrypt(item.DashboardResultID.ToString()) })" class="product-name"> @Html.DisplayFor(modelItem => item.EventName)</a> 
              <div class="small m-t-xs"> 
               <strong>Desc:</strong> @Html.DisplayFor(modelItem => item.Description) <br /> 
               <strong>Date:</strong> @Html.DisplayFor(modelItem => item.EventDate) 
              </div> 
              <br /> 
              <div class="m-t text-righ"> 
               <a href="@Url.Action("UploadResults", "Results", new { key = Functions.encrypt(item.DashboardResultID.ToString()) })" class="btn btn-xs btn-outline btn-primary">Upload Results <i class="fa fa-long-arrow-right"></i> </a> 
               <a href="@Url.Action("ViewResults", "Results", new { key = Functions.encrypt(item.DashboardResultID.ToString()) })" class="btn btn-xs btn-outline btn-primary">View Results <i class="fa fa-long-arrow-right"></i> </a> 
              </div> 
             </div> 
            </div> 
           </div> 
          </div> 
          if (row == 3) 
          { 
           Html.Encode(Bot); 
           row = 0; 
          } 
          else 
          { 
           row++; 
          } 


         } 
        } 


       </div> 
      </div> 
     </div> 
    </div> 
</div> 

J'ai 2 variables qui ont un extrait de div, je dois imprimer la div ouverte div et à proximité lorsque la ligne a plein, avec le code actuel je ne peux pas le faire, j'essaie un autre truc (HTMLString, HTML.Raw ...) mais rien ne fonctionne, pourriez-vous s'il vous plaît me donner un coup de main avec cela?

Merci!

+0

Qu'essayez-vous de faire? Qu'avez-vous essayé? (Cela n'aide pas "j'essaie un autre truc (HTMLString, HTML.Raw ...) écrou rien ne fonctionne")) – Shyju

+0

En haut du code j'ai ceci: string top = "

"; and string Bot = "
"; Je quoi convertir en HTML et j'ai essayé avec HTML.Raw (haut) et HTML.Encode (Top) mais rien @Shyju –

+0

Vous voulez l'imprimer comme il est ou vous voulez rendre ce HTML dans la page? – Shyju

Répondre

1

Comme son nom l'indique, la méthode Html.Encode va encoder l'entrée. Si vous essayez de rendre le HTML que vous avez dans la variable comme HTML pour votre page, vous pouvez utiliser la méthode Html.Raw.

Html.Raw La méthode ne fait pas de codage html. Assurez-vous donc de transmettre un code HTML sécurisé à cette page pour éviter d'éventuelles injections de script.

<div class="wrapper wrapper-content animated fadeInRight"> 
@foreach (var item in Model) 
{ 
    if (row == 0) 
    { 
    @Html.Raw(top);  
    } 
    <div>some html</div> 
    if (row == 0) 
    { 
    @Html.Raw(Bot); 
    } 
    row++; 
} 
</div> 
+0

J'ai essayé avec HTML.Raw et ne fonctionne pas .. l'extrait n'est pas rendu. –

+0

C'est le cas. Voir le violon de travail ici https://dotnetfiddle.net/D5COwj – Shyju

+0

Merci! Mon erreur est que j'ai raté le "@" au début de HTML.Raw –

0

J'ai noté plusieurs problèmes avec votre code.

Dans

     if (row == 0) 
         { 
          Html.Encode(top);  
         } 

vous ne passez pas entre C# et le mode de balisage, de sorte que le résultat de (l'appel erroné de) Html.Encode() est perdu.

Modifier ce code

     if (row == 0) 
         { 
          <text>@Html.Raw(top)</text> 
         } 

en est de même pour le code commençant par if (row == 3).

Ensuite, vous ne semblent pas fermer l'ouverture top<div> après la boucle for si la boucle se termine par une valeur de row != 3.

Vous devez toujours vérifier le rendu HTML avec View source code ou similaire. J'ai remarqué que Firefox indique où des étiquettes non appariées ont été «fixées», c'est-à-dire fermant des étiquettes insérées etc. Probablement d'autres navigateurs ont des fonctionnalités similaires.