2009-09-15 7 views
0

Sur une page donnée, pour afficher une fenêtre par exemple, il se peut que je doive avoir une initialisation JavaScript, des DIV avec certains identifiants et que tous doivent être liés entre eux. Le JavaScript peut avoir besoin de connaître l'ID d'un DIV, les DIV peuvent devoir être imbriqués d'une certaine manière et ainsi de suite. Évidemment, je ne veux pas m'inquiéter à ce sujet sur chaque page que j'utilise ce code. Cela le rendrait sujet à erreur et non DRY.ASP.NET MVC grouper/réutiliser les fonctionnalités d'affichage

Avec WebForms je résoudrais ce problème en écrivant un contrôle personnalisé. Comment allez-vous les gars dans vos projets? Utilisez-vous des méthodes d'extension crachant des chaînes, peut-être des contrôles utilisateur? Quelle est la manière recommandée?

Merci.

EDIT:

Voici un exemple lors de l'utilisation maître-pages:

  1. Dans la région de contenu HEAD Je besoin du code jQuery qui met en place certaines fonctionnalités
  2. Dans une région de contenu Je mettrais du HTML nécessaire pour montrer une partie de la fenêtre
  3. Dans une région de contenu différente, je mettrais le HTML actuel qui est affiché dans la fenêtre.

Donc toutes ces 3 pièces nécessiteraient 3 blocs de code différents mais seraient logiquement liées.

EDIT 2

exemple de code (en utilisant une page maître)

<asp:Content ContentPlaceHolderID="HeaderContent" runat="server"> 
    <script type="text/javascript"> 
    $(document).ready(function() { DoSomething('div1', 'div2'); }); 
    </script> 
</asp:Content> 

<asp:Content ContentPlaceHolderID="TopContent" runat="server"> 
    <div id='div1'> ... </div> 
</asp:Content> 

<asp:Content ContentPlaceHolderID="BottomContent" runat="server"> 
    <div id='div2'> ... </div> 
</asp:Content> 

div1 et div2 sont couplées à l'appel de fonction JavaScript. Si je fais une erreur, donnez au DIV un ID différent, le code se casserait. Ceci est un exemple simple qui prouve le point. Cela devient beaucoup plus compliqué quand le couplage repose sur div1 ayant une certaine structure par exemple.

+0

J'ai annulé l'édition; désolé, mais il a totalement changé la question initiale. Peut-être que je n'ai pas bien expliqué ... – pbz

Répondre

2

Pouvez-vous exploiter Site.Master à cette fin, ou au moins un autre maître de votre propre création? Toutes vos vues peuvent ensuite référencer ce modèle maître et bénéficier des éléments JavaScript et de mise en page initialisés.

Pour moi, cela a du sens si le contenu est de nature statique. Sinon, j'irais avec une méthode d'aide personnalisée Html.Init.

J'Envisioning quelque chose comme ce qui suit:

global.js

function doSomething() 
{ 
} 

//more code here 

page maître

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 

<!DOCTYPE html PUBLIC 
"-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title> 
     <asp:ContentPlaceHolder ID="TitleContent" runat="server" /> 
    </title> 
    <link rel="Stylesheet" href="~/Content/styles.css" /> 
    <script type="text/javascript" src="global.js"></script> 
</head> 
<body> 
    <div id="customContent"> 
    </div> 
    <div id="content"> 
     <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 
    </div>  
</body> 
</html> 
+0

J'utilise des pages maîtres, donc pas vraiment, parce que les morceaux sont séparés. Le code JS irait dans la section d'en-tête tandis que la partie html serait dans un espace réservé. – pbz

+0

@pgz: J'ai ajouté un échantillon à cette réponse. Vous n'avez pas à aller dans cette direction, mais c'est assez simple si vous le faites. Notez le fichier global.js inclus dans la balise de script en haut du fichier principal. –

+0

Bien, mais cette méthode doSomething devrait accepter des paramètres spécifiques à une page (comme les ID de certains DIVs). Si j'appelle doSomething ('div1', 'div2') et j'attribue, par erreur, différents identifiants au div que le code casserait. Ce que je cherche est un moyen d'éviter ce type d'erreur. Merci. – pbz

1

Le plus proche que vous pouvez obtenir à CustomControlls sont Partials. Ils ne sont pas aussi puissants que CustomControlls car ils n'ont aucun eventhandling (évidemment) mais sont un bon moyen de séparer le html commun.

+0

Le problème avec les partiels est qu'ils (partiels/contrôles utilisateur) n'ont pas d'espace réservé pour le contenu, donc je ne peux pas construire un partial qui écrit des "header" et "footer" html tout en me laissant personnaliser la partie médiane. Les extensions HTML ont le même problème. J'aurais besoin de deux partiels ou de deux méthodes d'extension, une pour rendre l'en-tête et une pour rendre le pied de page, et plus si j'ai besoin de plus de places. Merci. – pbz