2009-06-09 8 views
3
<%if (CanRemove) Response.Write("<b>"+ProductName+"</b>"); %> 

Ce code me semble moche. Plus spécifiquement, à chaque fois que je vois un appel à Response.Write dans un fichier ASCX ou ASPX, je me méfie que je fasse quelque chose de mal. Peut-être est-ce dû au fait de travailler auparavant avec XSLT et de remarquer que lorsque c'est bien fait, il y a rarement besoin d'un élément <xsl:text> pour générer du code HTML. J'ai l'impression que cela interfère avec ma capacité à lire le code lorsque mon code html est caché dans un bloc <% %>.Asp.net Response.Write dans un fichier ascx/aspx

Est-ce que c'est juste quelque chose dont j'ai besoin pour m'habituer avec Asp.Net ou y at-il une meilleure façon de le faire?

+2

mélange Response.Write avec déclaratives contrôles est sans aucun doute une odeur. –

+0

Je suppose que Razor répond également à cette question. ::: Shrug ::: – Brian

Répondre

6
<% if (CanRemove) { %><b><%= ProductName %></b><% } %> 

<%= est équivalent à Response.Write.

Et code bien formaté:

<% if (CanRemove) { %> 
    <b><%= ProductName %></b> 
<% } %> 

En outre, c'est la méthode ASP.NET MVC.

+0

N'est-ce pas plus cryptique? –

+0

Pas vraiment à mon avis. Visual Studio fait un bon travail de mise en évidence. –

+0

++ Ceci est certainement plus facile à lire lorsque vous avez des blocs plus longs de texte conditionnel. – Brian

4

Une autre approche consiste à utiliser un contrôle <asp:Literal> et à lier (ou définir manuellement) sa propriété Visible à CanRemove et son contenu au texte spécifique. Si cette approche est meilleure ou pire dépend du style dans lequel l'application est développée. Dans les applications de style ASP.NET MVC (ou celles qui modifient fortement le HTML directement), je pense que la méthode actuelle a plus de sens. Dans le formulaire Web ASP.NET et les applications basées sur le contrôle serveur, la solution <asp:Literal> est plus cohérente.

+0

La propriété visible est modifiée avec javascript. – Brian

+0

Brian: comment c'est possible? le '<% if (CanRemove) {...}%>' ne produira pas le ProductName au client AT ALL. Javascript ne le verra jamais. –

+0

@Mehrdad: Les endroits qui ont une propriété visible ont aussi des divs pour que javascript puisse les voir. Ces divs n'apparaissent qu'avec des trucs qui peuvent être supprimés. CanRemove est utilisé pour indiquer que c'est ce type de propriété (auquel cas le positionnement du texte est modifié de sorte que les éléments amovibles soient tous rassemblés). – Brian

3

Il semble que vous soyez en train de faire une mise en forme conditionnelle ici. Vous pourriez faire une partie de ceci dans le codebehind si vous le vouliez. Essayez d'utiliser une étiquette et de faire une logique contre.

<asp:Label id="lblProductName" runat="server" /> 

Et dans votre codebehind vous pourriez faire quelque chose comme ceci:

lblProductName.Text = ProductName; 
lblProductName.Visible = CanRemove; 
lblProductName.CssClass = "productLabel"; 

Ce n'est pas une chose terrible à faire des choses en utilisant côté serveur comprend, mais vous pouvez utiliser le codebehind à faire pour un produit de nettoyage Séparation de la logique de vue si vous choisissez.

1

Je pense qu'il est préférable d'utiliser le contrôle littéral et de définir sa propriété Text dans les méthodes Page_Load ou OnLoad dans le code derrière la classe.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (CanRemove) 
    { 
    myLiteral.Text = "<b>ProductName</b>" 
    } 
} 

contrôle plus System.Web.UI.WebControls.Literal a une propriété nommée mode qui donne le contrôle du rendu:

  1. PassThrough - Le contenu du contrôle ne sont pas modifiés; Codage - Le contenu du contrôle est converti en une chaîne codée en HTML (peut vous fournir une certaine protection contre les scripts inter-sites).
  2. Transformation - Les éléments de langage de balisage non pris en charge sont supprimés du contenu du contrôle. Si le contrôle Literal est rendu sur un navigateur prenant en charge HTML ou XHTML, le contenu du contrôle n'est pas modifié.

Vérifiez MSDN documentation en ligne pour la classe littérale link

Questions connexes