2010-02-18 7 views
1

J'ai pensé à un petit bidouillage ce matin, probablement pas original, mais je ne l'ai pas vu auparavant. Je ne considère pas cela comme une bonne pratique, mais je peux vous aider lorsque vous avez besoin de restituer un bloc de code à plusieurs reprises sur votre page et que vous ne voulez pas toucher d'autres codes ou créer d'autres fichiers (vues partielles ou composants).Utilisation de délégués pour rendre les blocs html dans asp.net

Dans votre fichier .aspx créer un délégué anonyme comme ceci:

<% 
Action<DataType> renderMe = data => { 
    %> Some html text <a href="<%= data.url %>">That can</a> contain quotes, etc. 
    And other <%= data.something %> stuff... 
    <% 
}; 
%> 

Ensuite, vous pouvez simplement l'utiliser partout où vous voulez: (myvar1 et myvar2 sont de type DataType)

This is some html and I want the block here: <% renderMe(myvar1); %> ... 
or maybe here <% renderMe(myvar2); %> 

I savoir que ce n'est pas une bonne idée, mais quelqu'un peut-il voir des problèmes avec cela?

+0

Il me semble trop ressembler à PHP. Je préfère utiliser un contrôle personnalisé ou un répéteur. – Randolpho

+1

Je voudrais savoir ce qu'il y a de si mauvais dans les vues partielles que vous pensez avoir besoin d'utiliser des variables. Vous pouvez modifier où MVC cherche des vues partielles afin que vous puissiez avoir un emplacement commun pour toute l'application web donc ... – griegs

+0

Juste fait pour le balisage éventuellement confus. En dehors de cela, il peut être utile dans certaines situations. – awright18

Répondre

0

Ce n'est pas mauvais en soi. Tout à fait semblable à Spark's macros (qui semble mieux imho). Rashud`s script manager (pour l'initialisation js avancée) utilise la même technique. MvcContrib's grid renderer fait de même.

Chose est - niche lorsque cela convient est vraiment étroite. Uniquement lorsque l'extrait de code html souhaité doit être transmis au serveur ou lorsque vous souhaitez le réutiliser deux fois ou plus dans le contexte d'une vue spécifique, mais que vous ne souhaitez pas créer de vue partielle séparée.