2009-10-13 6 views
1

Je me demande s'il existe un équivalent des composants Monorail View pour Asp.Net MVC? Ce que j'essaie de faire est de rendre une interface utilisateur complexe qui dépend d'une classe, disons que nous sommes dans une vue Liste, je veux passer un objet à cet équivalent ViewComponent et qu'il prendra l'objet en paramètre et rendre l'interface utilisateur complexe pour moi me permettant de faire d'autres choses dans la vue. Quel serait le meilleur moyen de le faire dans Asp.Net MVC?Asp.Net Mvc 2 pièces réutilisables?

Puisqu'il s'agit d'une interface utilisateur complexe, je préférerais l'écrire une fois, donc les modèles ne sont pas vraiment la façon dont je voudrais aller, car cela signifiera que je vais avoir des problèmes de maintenabilité.
Certaines options j'ai vu (et je suis sur le point de commencer à essayer) sont:

  • Html.RenderAction dans l'avenir
  • Subcontroller

Cependant, je voudrais savoir s'il y a quelque chose d'autre ou si l'un est meilleur que l'autre pour ce scénario particulier

Répondre

2

Vous pouvez utiliser

<% Html.RenderAction<ProductController>(c => c.RenderProductResults()); %> 

Jetez un oeil à cette page

+0

San, Viewcomponents supporte deux passes traitement (méthodes Initialize et Render qui permet) qui ne sera pas réalisé en appelant un rendu. Aussi, à mon avis, ils ne servent pas le même but, je trouve les concepts très différents. J'utilise mes propres emballages pour jquery ui et regardons comme ça dans mon code: Je pense que ce serait vraiment l'air funky avec RenderAction avec asp.net mvc, en utilisant UserControl (ou System.Web.Control) permettrait la réutilisation de petits composants ainsi que viewcomponents, mais cette solution est liée à viewengine WebForm. – smoothdeveloper

0

Veuillez jeter un oeil à DisplayTemplates ainsi que EditorTemplates dans l'aperçu MVC 2.

+0

Je ne pense pas qu'ils soient une option car cela générerait du code pour chaque vue, ce que je veux c'est de mettre le "complexUI" une fois dans une vue – roundcrisis

2

Qu'en est-il de RenderPartial? Cela semble correspondre au projet de loi.

<% Html.RenderPartial("MyPartialView", Model.Data); %> 
+1

Merci d'une autre façon mais trouve RenderAction plus puissant – roundcrisis

0

MvcContrib InputBuilder a quelque chose de similaire.

Bien que vous pouvez simplement écrire votre propre:

public static string RenderInput(this HtmlHelper html, object data, string prefix) 
{ 
    foreach (var prop in data.GetType().GetProperties()) 
    { 
     object val = prop.GetValue(data, new object[0]); 
     string name = prefix + prop.Name; 
     switch (prop.PropertyType.Name) 
     { 
      case "String": html.TextBox(name, val); break; 
      case "Guid": html.Hidden(name, val); break; 
      default: html.RenderInput(val, name + "."); break; 
     } 
    } 
} 

récursion avis. Bien sûr, vous devrez ajouter le support des collections, etc ... à l'intérieur de switch (PropertyType) ... mais ce n'est pas si difficile. Vous pouvez également vérifier UIHint sur la propriété pour rendre les partiels. Beaucoup de possibilités et sous votre contrôle ;-)