Le code est-il paramétrable? Est-ce que vous pouvez contrôler les différences entre une invocation et une autre via un petit ensemble de paramètres? Si c'est le cas, je considérerais écrire une extension HtmlHelper pour le générer. Ensuite, j'utiliserais l'extension dans ma vue pour générer le code. Passez les paramètres à View via ViewData du contrôleur si vous ne pouvez pas le dériver à partir des valeurs Model ou RouteValues.
<%= Html.GenerateGoogleVisAPI(ViewData["someThing"],
ViewData["otherThing"]) %>
Une autre alternative serait de faire un ViewUserControl - auquel vous pouvez passer d'un modèle et ViewData. Vous incluriez toujours ceci via la vue.
<% Html.RenderPartial("GoogleVisControl",
ViewData["GoogleVisModel"],
ViewData); %>
EDIT:
Mes HtmlHelperExtensions vont habituellement dans un projet de bibliothèque de classes séparées. Donc, ma hiérarchie ressemblerait à quelque chose comme ceci. Notez que j'omets les projets de test associés à chaque niveau pour des raisons de concision, mais ils seraient également inclus. Si vous avez plusieurs applications utilisant la même couche de données, la couche de données peut exister dans une solution distincte, selon que vous avez une solution par application ou plusieurs applications par solution. J'ajoute des références de projet au projet web pour les projets de bibliothèque de classes.
+-Project.Web
+-Content
+-Controllers
+-Models
+-Views
+-...
+-Shared
+-Error.aspx
+-GoogleVisControl.ascx
+-LoginUserControl.ascx
+-Site.Master
+-...
+-...
+-...
+-Project.Common
+-Project.Common.Web
+-HtmlHelperExtensions.cs
+-...
+-Project.Data
+...
Puisque Javascript est une composante de la vue, j'utiliserais l'approche d'assistance que tvanfosson suggère. –
Première réflexion, où placez-vous le code pour l'extension HtmlHelper. Pouvez-vous modifier votre réponse pour inclure où ils vont dans la hiérarchie du projet. Et je suppose que je dirais "non" le truc n'est pas paramétrable. Tout est basé sur des charges de données provenant d'un DataTable ADO.NET. – BuddyJoe
Deuxièmement, si je fais un ceci dans un UserControl (.ascx) devrais-je utiliser un CodeBehind? Je remarque qu'il "m'encourage" à utiliser un design SingleFile .... mais pas même parce qu'il ne met même pas dans le talon Page_Load – BuddyJoe