Если вы пытаетесь связать с нескольких моделей на постбэк, вы должны попробовать использовать атрибут Bind и указать префиксы, используемые для каждой модели в ваших аргументах. В некоторых сценариях, где вы не сможете использовать отдельные префиксы для своих элементов модели, вам может показаться, что это проще сделать с несколькими TryUpdateModel и отдельными белыми списками вместо того, чтобы помещать модели в параметры.
public ActionResult Update([Bind(Prefix="Customer")]Customer customer,
[Bind(Prefix="Address")]Address address)
{
...
}
Это предположить, что у вас есть ViewModel как:
public class CustomerAddressModel
{
public Customer Customer { get; set; }
public Address Address { get; set; }
}
и ссылаться на это нравится:
<%= Html.TextBox("Customer.Name") %>
...
<%= Html.TextBox("Address.Street") %>
или, используя 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))
{
...
}
}
}
В этом случае ваша модель может содержать только поля из двух разных моделей, которые вы пытаетесь обновить.
public class CustomerAddressModel
{
public string Name { get; set; }
public string Company { get; set; }
public string Street { get; set; }
...
}
Это дубликат, я уверен. Создайте объект Model с общедоступными свойствами для объектов Customer и Address. –