簡體   English   中英

如何在同一MVC視圖中顯示兩個模型

[英]How to show two models in same MVC view

我有一個模型,用於存儲mycustomer新請求信息。 在另一個歷史模型中,我存儲了客戶的所有先前請求。 有鑒於此,我想接受新的訂單,並且還要查看他以前的訂單,並在看到他之前的訂單后建議一些食物。

這是我的模特...

    public class CustomerFoodModel
    {
    public DateTime FoodRequestCreated { get; set; }
    public string FoodRequestType { get; set; }
    ...
    ...
    }

    public class CustomerHistoryModel
    {
    public string Name { get; set; }
    public DateTime FoodRequestCreated { get; set; }
    public string FoodRequestType { get; set; }
    ...
    ...
    }

Helper.cs文件

    public static CustomerFoodModel getCustomerDetails(int id) // id is loyalty card number
     {
        // get details from (cutomer) sql table

        //store it in (CustomerFoodModel)

        // check if it has previous orders
         getCustomerHistoryDetails(id);
        ....


     }

     public static CustomerHistoryModel getCustomerHistoryDetails(int id)
     {
     // get deails from (history) sql table
     // store it in (CustomerHistoryModel
     }

在我的控制器中,我將我的(CustomerFoodModel)傳遞給視圖。

      public ActionResult EditCustomerRequest(int id, string name, string date)
    {
        CustomerFoodModel CRequest =  Helper.getCustomerDetails(id);
        ...

        return PartialView("EditCustomerRequest",CRequest);

        }

如何在同一視圖中顯示(CustomerHistoryModel)? (CustomerFoodModel)中可以包含(CustomerHistoryModel)嗎?

創建一個新的類來包裝兩個模型。

public class CustomerFoodModel
{
   public CustomerFoodModel CustomerFood { get; set; }
   public CustomerHistoryModel CustomerHistory { get; set; }
}

在您的控制器上

public ActionResult EditCustomerRequest(int id, string name, string date)
{
    CustomerFoodModel CRequest =  Helper.getCustomerDetails(id);
    CustomerHistoryModel CHModel = Helper. getCustomerHistoryDetails(id);
    return PartialView("EditCustomerRequest",new CustomerFoodModel(){
         CustomerFood = CRequest,
         CustomerHistory = CHModel
    });

}

使用包含兩個類的包裝器類

public class CustomerViewModel
{
    public CustomerFoodModel FoodModel { get; set; }
    public CustomerHistoryModel HistoryModel { get; set; }
}

我認為最好的方法是在主視圖中使用局部視圖。 局部視圖可以回調到另一個控制器以獲取新模型並將該模型傳遞給局部視圖。 這樣可以使事情更好地分離。

在這篇文章中查找類似的問題。 在ASP.net MVC 4中使用部分視圖

您有幾種選擇。 我可能會創建一個包含兩個模型的視圖模型:

public class CustomerViewModel
{
    public CustomerFoodModel FoodModel { get; set; }
    public CustomerHistoryModel HistoryModel { get; set; }
}

或者,根據您的數據結構,每個客戶可能有多個歷史記錄條目:

public class CustomerViewModel
{
    public CustomerFoodModel FoodModel { get; set; }
    public List<CustomerHistoryModel> HistoryModels { get; set; }
}

然后,您的getCustomerDetails函數將返回一個CustomerViewModel

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM