2010-04-15 10 views
0

Ok, je me suis un viewmodel comme suit:Reliure Voir modèle à partir d'un poste de forme avec des types complexes internes

public class PageViewModel 
{ 
    public Item Item { get; set; } 
... 

    public PageViewModel 
    { } 

    public PageViewModel(Item itemWebPage) 
    { 
    ... 
    } 
} 

-je utiliser un formulaire pour modifier cet article à l'aide d'une route comme: /contrôleur/Edition/43

le contrôleur utilise ce code:

[AcceptVerbs("GET")] 
    public new ActionResult Edit(int id) 
    { 
    ... 
     PageViewModel pageViewModel = new PageViewModel(...); 

     return PartialView(pageViewModel); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Edit(int id, PageViewModel item) 
    { 
     if (ModelState.IsValid) 
     { 
    ... 
    // Here, the item.Item.ID is null, I want it to map to the id of the route. 
     } 

     return PartialView("Edit", item); 
    } 

ce que je veux atteindre est l'ID de la propriété: item.Item.ID être lié à l'ID de l'URL (l'itinéraire). Cependant, je ne peux pas le faire fonctionner. J'ai essayé d'utiliser l'attribut [Bind()].

Je l'ai fixé en utilisant maintenant un champ caché sous la forme comme ceci:

<%= Html.HiddenFor(model => model.Item.ID)%> 

Cependant, cela se sent un peu dégueu. Je voudrais savoir s'il y a une façon plus propre de faire cela?

Répondre

1

Personnellement, je mettrais le paramètre ID dans la déclaration de formulaire comme suit:

<% using (Html.BeginForm("Edit", "YourController", FormMethod.Post, new { id = model.Item.ID })) { %> 

... 

<% } %> 
+0

Finalement, il était si simple :-) merci! –