2012-07-13 7 views
0

J'ai besoin d'une vue partielle avec quelques champs de saisie dynamiques. Pour ce faire, mon modèle contient un objet de type "object", puis dans mon controller je crée un nouveau modèle avec le type d'objet "myobject".Comment passer un objet dynamique de la vue au contrôleur

Tout fonctionne correctement dans PartialViewResult, mais après l'envoi du formulaire, l'objet ne contient pas mon type d'objet "myobject".

Comment envoyer le formulaire Soumettre le bon objet?

Controller:

public PartialViewResult mypage() 
{ 
myModel model = new myModel(); 
myObject obj = new myObject(); 
model.myobject = obj; 

return PartialView(“mypage”,model); 
} 

public PartialViewResult Save (myModel model) 
{ 
    // Here I need model.myobject!!! 
} 

Modèle:

public class myModel 
{ 
    public long id {get;set;} 
    public object myobject {get;set;} 
} 

public myObject 
{ 
    public string myname {get;set;} 
} 

Vue:

@model myModel 
// form (code omitted) 
@Html.EditorFor(model => model.myobject) 

<button type="submit">Save</button> 

Modèle

@model myObject 

@Html.EditorFor(model => model.myname) 

Répondre

1

L'objet lui-même n'aura aucune propriété - vous devez le convertir en le type contenant la propriété dont vous avez besoin.

Si vous ne pouvez pas faire cela parce que vous voulez réutiliser la vue pour différents types de myobject, alors vous devrez utiliser une interface et quelques propriétés communément nommées.

L'alternative consiste à utiliser un sac de propriétés, c'est-à-dire un dictionnaire, et à référencer la valeur par nom de clé dans la vue.

Vous pouvez alors une propriété définie sur votre modèle:

public Dictionary<string, string> MyItems {get;set;} 

et les référencer dans votre page:

model.MyItems["keyName"] 
+0

J'ai essayé de lancer, mais je reçois cette erreur: « Impossible de jeter l'objet de type « System.Object » taper « MyProjext.Models.myObject ». » – User907863

+0

Où avez-vous essayé de le lancer? - pouvez-vous modifier votre code pour montrer ce que vous avez essayé? – BonyT

1

Vous avez jeter l'objet retourné. Il est quelque chose comme ça:

MyObject myObject = (MyObject) objectReturned; 
+0

J'ai essayé de lancer mais j'ai cette erreur: "Impossible de lancer l'objet de type 'System.Object' pour taper 'MyProjext.Models.myObject'." – User907863

Questions connexes