2012-09-14 2 views
1

L'objectif final est de rendre un modèle d'éditeur, pour une propriété de modèle, connu uniquement lors de l'exécution, qui ne prendra pas sa valeur à partir de ViewBag.Comment rendre le modèle d'éditeur pour la propriété de modèle par nom de propriété

Html.Editor utilisera la valeur ViewBag si les noms de propriété correspondent. Je ne veux pas ça et je déteste cette "fonctionnalité".

J'espère que cela est possible en quelque sorte:

var propName = "MyProperty"; 
var expression = GiveMeTheExpression(); 
@Html.EditorFor(expression,"MyEditorTemplate") 

Si pas alors une certaine façon de rendre un modèle d'éditeur sans les valeurs de ViewBag utilisées au lieu des valeurs du modèle. Je suis tout à fait bien avec faire cela, si J'IGNORE LES VALEURS ViewBag D'une certaine façon:

@Html.Editor(propName, other, arguments) 

Répondre

0

Pourquoi ne pas essayer?

@Html.EditorFor(x=>x.SomePropertyName) 

En supposant SomePropertyName est le nom d'une propriété de votre modèle qui est fortement typée à votre vue.

+0

"... rendre un modèle d'éditeur, pour une propriété de modèle, connu seulement lors de l'exécution ..." –

0

Shyju prenant environ objet fortement typé, si je comprends bien, vous avez besoin de quelque chose comme: asp.net mvc 3 and dynamic view generation

+0

Je comprends ce que ça fait et oui, je fais quelque chose de similaire, mais ça ne répond pas à mon question. Dans cet exemple, ils connaissent le type de propriété au moment du design. Mon application ne connaît pas le type avant l'exécution. –

1

Vous devrez probablement utiliser Html.Partial avec une coutume ViewDataDictionary.

object knownAtRuntime = ViewBag.ObjectName; // Adapt to your solution 
string templateName = String.Concat("EditorTemplates/", knownAtRuntime.GetType().Name);    

@Html.Partial(templateName, knownAtRuntime, new ViewDataDictionary(knownAtRuntime)); 

Note: J'ai fait cet exemple simple pour illustrer le concept de base, mais vous pouvez d'étendre bien sûr à lire UIHintAttribute etc si vous le souhaitez.

Note 2: Vous pouvez également copier les valeurs de Html.ViewData à la nouvelle ViewDataDictionary pour garder votre ModelState etc.

0

Ma solution a été d'utiliser la méthode @ Html.Editor() avec le nom de la propriété sous forme de chaîne et pour utiliser des clés ViewBag très peu susceptibles d'être trouvées sur l'objet modèle.

Pas idéal, mais devrait bien fonctionner.

Questions connexes