2010-06-28 4 views
1

Normalement, je travaille dans ASP Classic, et je suis encore un peu vert sur ASP.Net MVC. J'ai mon modèle avec ses champs ou entités (peut-être pas le bon mot donc pourquoi ne pas trouver si répondu précédemment, pardonnez-moi), et certains d'entre eux auront des valeurs nulles telles que des hyperliens, adresse e-mail, spécifique types de numéros de téléphone, etcNe pas afficher/écrire html spécifique si model.entity est null

Ce que je veux faire n'est pas d'écrire certains blocs de HTML dans la boucle foreach si un champ est vide.

Dans ASP classique, je l'aurais écrit une déclaration If le long des lignes de:

<% If RS.field <> NULL then %>HTML with <%=RS.field %><% End If %> 
<% If RS.field2 <> NULL then %>HTML with <%=RS.field2 %><% End If %> 
... 

Cependant, je ne sais pas comment obtenir le même résultat dans ASP.Net MVC.

Dans un de mes usages actuels, une liste de vendeurs retournés pour un ensemble de résultats de recherche, il passe par une boucle foreach et renvoie le code HTML en cours (en partie):

Website: <a class="url" href="<%= seller.ContactWebsite %>" target="_blank" title="Visit the website for <%= seller.Name %>"><%= seller.ContactWebsite %></a><br /> 

Donc, si par exemple j'ai un champ du modèle, disons seller.ContactWebsite, et ce champ était NULL, je ne voudrais pas qu'il écrive ceci dans le cadre de la boucle foreach.

Toutes les réponses et l'assistance ont été appréciées.

Répondre

2

Si vous utilisez les WebForms voir le moteur avec C# est ici comment votre code pourrait ressembler à:

<% if (!string.IsNullOrEmpty(Model.field1)) { %> 
    HTML with <%= Model.field1 %> 
<% } %> 

Cela suppose que votre view is strongly typed à une classe de modèle et que l'action du contrôleur fourni à la vue d'une instance de ce modèle.

Comme vous pouvez le voir cette syntaxe se transforme rapidement en une soupe de tag comme le balisage de mélange avec le code côté serveur est moche. Pour résoudre cela, vous pouvez write a custom HTML helper method qui sera responsable du formatage correct.

Prenons par exemple cet extrait:

<a class="url" href="<%= seller.ContactWebsite %>" target="_blank" title="Visit the website for <%= seller.Name %>"><%= seller.ContactWebsite %></a> 

Voilà comment une méthode d'assistance potentiel pourrait ressembler à:

public static MvcHtmlString MyCustomLink(this HtmlHelper htmlHelper, SellerViewModel seller) 
{ 
    if (seller == null) 
    { 
     return MvcHtmlString.Empty; 
    } 
    var anchor = new TagBuilder("a"); 
    anchor.AddCssClass("url"); 
    anchor.MergeAttribute("href", seller.ContactWebsite); 
    anchor.MergeAttribute("target", "_blank"); 
    anchor.MergeAttribute("title", "Visit the website for " + seller.Name); 
    anchor.SetInnerText(seller.ContactWebsite); 
    return MvcHtmlString.Create(anchor.ToString()); 
} 

qui pourrait être utilisé comme celui-ci dans la boucle for:

<%= Html.MyCustomLink(seller) %> 
+0

Merci Darin, c'est tout à fait sensé - j'essaierai ça demain et je vous ferai connaître la re sults (et avec une réponse acceptée aussi) – thewinchester

+0

Travaillé parfaitement, et explorera les méthodes d'aide beaucoup plus loin aussi parce que cela aidera à rendre la vie beaucoup plus facile à l'avenir. – thewinchester

Questions connexes