我想知道如何使用模型綁定的情況下,我從一個頁面上的多個實體返回信息?MVC - 模型綁定與多個實體在同一頁
我想顯示來自兩個獨立實體(即客戶+地址)的字段組合。我正在爲我的模型使用Microsoft的DAAB和自定義業務實體。
任何想法?
我想知道如何使用模型綁定的情況下,我從一個頁面上的多個實體返回信息?MVC - 模型綁定與多個實體在同一頁
我想顯示來自兩個獨立實體(即客戶+地址)的字段組合。我正在爲我的模型使用Microsoft的DAAB和自定義業務實體。
任何想法?
如果你想綁定到回傳多種模式,你應該儘量使用綁定屬性,並指定用於你的參數各型號的前綴。在某些情況下 - 您可能無法爲模型元素使用單獨的前綴 - 您可能會發現使用多個TryUpdateModel和單獨的白名單更容易,而不是將模型放入參數中。
public ActionResult Update([Bind(Prefix="Customer")]Customer customer,
[Bind(Prefix="Address")]Address address)
{
...
}
這假設你有一個視圖模型,如:
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; }
...
}
您可以使用ViewData將多個模型傳遞給視圖。
SomeControllerMethod()
{
...
ViewData["Customer"] = myCustomer;
ViewData["Address"] = myAddress;
}
和視圖:
Customer name: <%= (ViewData["Customer"] as Customer).Name %>
Street: <%= (ViewData["Address"] as Address).Street %>
這會將多個對象傳遞給視圖,它們不是模型,您將無法通過視圖模型對象訪問其屬性。 – 2009-07-03 14:27:44
使用視圖模型 – 2013-08-20 01:52:02
簡短的回答是:
@model<ViewModel type>
作爲視圖中的第一道防線。您現在強烈鍵入您的視圖,並有權訪問域對象的所有屬性。
這是一個重複的,我敢肯定。爲您的客戶和地址對象創建具有公共屬性的模型對象。 – 2009-07-03 14:20:33