1

標準の WebForms では、いくつかのプロパティがあり、それらを設定します。次に、Web ページはそれらにバインドします。たとえば、<%#CustomerName%>.

MVC は別のアプローチであることは理解していますが、複数のソースからのデータを同時に表示する基本的な必要性は依然としてあるはずです。

@Model使用すると、コントローラーのデータセットにアクセスすることがわかります。しかし、2 つまたは 3 つの個別のアイテムのデータを表示したい場合はどうすればよいでしょうか。

、住所、現在の注文をすべて同じページに表示したい場合Customer、これら3つの別々のモデルを1つのビューに渡す方法はありますか、それともそれぞれの部分ビューを作成する必要がある場合ですか?それらをすべて同じページに表示しますか?

4

3 に答える 3

4

アイテムは関連していますか?そうである場合は、各モデルの集約である ViewModel を作成することを検討してください。

public CustomerViewModel
{
    public Customer Customer {get; set;
    public AddressViewModel Address {get; set;}
    public OrderViewModel Order {get; set;}
}

次に、あなたの見解で:

@inherits System.Web.Mvc.WebViewPage<CustomerViewModel>

@model CustomerViewModel

@Model.Customer.Name

@Model.Address.Street

@Model.Order.Name

@model.Order.Date

それ以外の場合、アイテムがまったく関連していない場合は、次を使用できますRenderAction

あなたのCustomer見解では:

@Model.Customer.Name

@(Html.RenderAction("GetAddress", "Customer", new { customerId = Model.Customer.Id });) 

@(Html.RenderAction("GetOrders", "Order", new { customerId = Model.Customer.Id });)
于 2012-07-24T17:10:07.683 に答える
4

ViewModelこれらすべてのデータ(クラス)をプロパティとして保持し、それをビューに返す

public class CustomerViewModel
{
  public int ID { set;get;}
  public string Name { set;get;}
  public Address Address{ set;get;}
  public IEnumerable<Order> Orders { set;get;}

  public CustomerViewModel()
  {
    if(Address==null)
        Address=new Addres();
    if(Orders ==null)
        Orders =new List<Order>();

  }
}
public class Address
{  
   public string AddressLine1 { set;get;}
   //Other properties
}
public class Order
{  
   public int ORderID { set;get;}
   //Other properties
}

あなたのGETアクションメソッド

public ActionResult Index(int id)
{
  var vm=new CustomerViewModel();

  vm.Name=repo.GetUser(id).Name;

  vm.Address=repo.GetAddressFromUserID(id);

  vm.Orders=repo.GetOrdersFromUser(id); 

  return View(vm);
}

そして、あなたのビューは強く型付けされます tpCustomerViewModel

@model CustomerViewModel

<p>@Model.Name</p>
<p>@Model.Address.AddressLine1</>
@foreach(var item in Model.Orders)
{
  <p>@item.OrderID</p>
}
于 2012-07-24T17:10:49.953 に答える
0

あなたがすることはModel、3 つの顧客モデルを含むコレクションを作成することです。MVC でモデルについて話しているとき、それらを と考えると役に立ちますViewModels。つまり、ビューごとに 1 つのモデルがあり、そのビューのすべてのデータが含まれます。

したがって、以下の例では、ビュー モデルのプロパティとして設定されたデータ モデルからの顧客のコレクションがあります。@Model.Customersビュー (または Html ヘルパー拡張メソッド) で反復できるようになりました。

public class MyViewModel{
    private List<Customer> _customers;

    public List<Customer> Customers{
        get{
            return _customers;
        }
    }
    //Other View Model Properties and Methods
}
于 2012-07-24T17:09:35.007 に答える