Si vous essayez de lier à plusieurs modèles sur postback, vous devriez essayer d'utiliser l'attribut Bind et en spécifiant les préfixes utilisés pour chaque modèle dans vos arguments. Dans certains scénarios - où vous ne pouvez pas utiliser des préfixes séparés pour vos éléments de modèle - vous pourriez trouver cela plus facile à faire avec plusieurs TryUpdateModel et des listes blanches distinctes plutôt que de placer les modèles dans les paramètres.
public ActionResult Update([Bind(Prefix="Customer")]Customer customer,
[Bind(Prefix="Address")]Address address)
{
...
}
Cela vous assumez avez un ViewModel comme:
public class CustomerAddressModel
{
public Customer Customer { get; set; }
public Address Address { get; set; }
}
et référencer comme:
<%= Html.TextBox("Customer.Name") %>
...
<%= Html.TextBox("Address.Street") %>
ou, en utilisant TryUpdateModel,
public ActionResult Update(int id)
{
var customer = db.Customers.Where(c => c.ID == id).Single();
var whitelist = new string[] { "name", "company", ... };
if (TryUpdateModel(customer, whitelist))
{
var addressWhitelist = new string[] { "street", "city", ... };
if (TryUpdateModel(customer.Address, addressWhitelist))
{
...
}
}
}
Dans ce cas, votre modèle peut contenir uniquement les champs des deux modèles différents que vous essayez de mettre à jour.
public class CustomerAddressModel
{
public string Name { get; set; }
public string Company { get; set; }
public string Street { get; set; }
...
}
Ceci est un doublon, im assez sûr. Créez un objet Modèle avec des propriétés publiques pour vos objets Client et Adresse. –