2011-05-24 3 views
0

J'ai une application ASP.NET MVC3 (avec Razor) où je permet aux utilisateurs de spécifier des composants pour la vue - comme la mise en page, ou partiels que j'utilise pour rendre le contenu. (Par exemple, j'ai un modèle qui a un Title et Description, et je permets aux utilisateurs de spécifier un CSHTML partiel dans un répertoire particulier que j'utilise pour rendre les données.)Razor et la création d'aides pour les utilisateurs: Html. *

Le problème que je suis en cours d'exécution en est isolement et facilité d'utilisation pour mes utilisateurs. Par exemple, ils peuvent coder actuellement écrire dans leurs partials comme:

@Html.ActionLink("edit", "Edit", "Content", new { Id = Model.Id }, null) 

je place comme eux d'écrire quelque chose comme:

@SomeHelper.EditLinkFor(Model.Id) 

En ce moment, mes contrôleurs font partie de l'API publique . Les utilisateurs doivent connaître les noms des contrôleurs et des actions pour spécifier certains liens (par exemple, modifier le lien). Je voudrais fournir une API simplifiée.

Mais comment faire? Si je viens de créer la classe SomeHelper, essayer d'appeler @Html.ActionLink ne fait pas beaucoup de progrès. J'ai essayé d'écrire:

return System.Web.Mvc.Html.LinkExtensions.ActionLink(null, content.Title, "Details", "Content", new { Id = content.Id }, null); 

Mais j'obtiens une exception de pointeur nul. Créer une instance HtmlHelper pour le premier paramètre n'est pas facile.

Quelles sont mes options? Suis-je obligé de leur fournir un accès complet à tous mes contrôleurs dans le cadre de mon API? N'y a-t-il aucun moyen de fournir une API simplifiée pour leur consommation? (Je n'essaie pas de les empêcher d'écrire du code Razor, encapsule et simplifie les appels, et élimine une dépendance sous-jacente sur mes contrôleurs et modèles.)

Répondre

1
+0

L'option a est cool, mais pas ce dont j'ai besoin; L'option b était essentiellement la réponse, bien que je devais ramper un long chemin dans un trou de lapin pour le faire fonctionner. – ashes999

+0

Je dois encore demander si est-il nécessaire d'aller à l'encontre de la simple commande du contrôleur/action de MVC? Les utilisateurs sont-ils inexpérimentés? La syntaxe Controller/Action facilite la tâche et toute personne connaissant MVC peut facilement trouver le code à suivre. –

1

Les helpers html fournis sont assez basiques - mais vous pouvez certainement créer un assistant. Soyez prudent: l'API existante est fournie et s'adapte exactement au reste du modèle de programmation MVC (aides Ajax et html et la syntaxe de routage)

Le problème réside dans la façon dont vous appelez le code. Veuillez poster tout votre code pour que nous puissions le vérifier.

La question est exactement ce que vous voulez faire? Vous voulez créer une aide pour EditLinkFor - mais quelque chose ne fonctionne pas, peut-on voir tout le code?

+0

Ma question n'est pas tant sur le code spécifique qui est défaillant; Ma question concerne plus la conception globale. Je veux fournir des assistants simplifiés, au lieu de demander aux utilisateurs d'utiliser (et donc de connaître) mes contrôleurs et vues existants. Peut-être que j'aboie le mauvais arbre? – ashes999

+0

Rien ne dit que vous ne pouvez pas. Sans voir à quel point vos routes seraient complexes et à quel point les utilisateurs seraient inexpérimentés, c'est difficile à dire. Cependant, un contrôleur a un but spécifique. Si vous le nommez d'une manière basique et fournissez de la documentation, un développeur devrait être capable de l'utiliser facilement avec succès. Je ne connais pas le niveau de compétence des gens - mais s'il existe une documentation de base autour de vos contrôleurs/méthodes alors au moins c'est cohérent dans l'application avec le reste de MVC. –

+0

+1 bonne discussion sur les contrôleurs, AJAX et API. – ashes999

Questions connexes