2012-08-16 61 views
0

我有一個觀點,必須呈現兩份報告。將2個模型傳遞給可能的視圖?

我的動作:

public ActionResult TradeUKKPIShowData(SundaysInMonthViewModel model) //show actual data in the view 
{ 
    var tradesmenReportData = _reportingService.GetTradeUKKPITradesmen(model.SelectedSunday); 
    var jobSortedReportData = _reportingService.GetTradeUKKPIJobSorted(model.SelectedSunday); 
    ViewBag.jobSortedReportDate = model.SelectedSunday; 
    ViewBag.addJobSortedModel = jobSortedReportData; 
    return View(tradesmenReportData); 
} 

我的第一個問題是與上述動作的前兩行。我必須通過什麼? 編譯錯誤,我得到的那些線:

「TradeUK.Services.IReportingService.GetTradeUKKPITradesmen(TradeUK.Entities.Reporting.KPIResults)」有一些無效參數

所有報告中的存儲過程,需要的是日期被選擇的/週日

我SundaysInMonthViewModel:

namespace TradeUK.Admin.Web.ViewModels 
{ 
    public class SundaysInMonthViewModel 
    { 
     public IEnumerable<SelectListItem> AllSundays { set; get; } 
     public string SelectedSunday { set; get; } 
    } 
} 

這裏IReportingServices.cs:

IEnumerable<KPIResults> GetTradeUKKPITradesmen(DateTime date); 
IEnumerable<KPIResults> GetTradeUKKPIJobSorted(DateTime date); 

和實際方法上面:

public IEnumerable<KPIResults> GetTradeUKKPITradesmen(DateTime date) 
{ 
} 


public IEnumerable<KPIResults> GetTradeUKKPIJobSorted(DateTime date) 
{ 
} 

KPIResults:

namespace TradeUK.Entities.Reporting 
{ 
public class KPIResults 
    { 
    public virtual string Title { get; set; } 
    public virtual int Total { get; set; } 
    public virtual int Week6 { get; set; } 
    public virtual int Week5 { get; set; } 
    public virtual int Week4 { get; set; } 
    public virtual int Week3 { get; set; } 
    public virtual int Week2 { get; set; } 
    public virtual int Week1 { get; set; } 
    } 
} 

另一個問題是對回報(查看(tradesmenReportData,jobSortedReportData) 我能做到這一點?在實際的視圖中,我必須對循環進行foreach以顯示各組報告數據。

請幫忙? 感謝

+0

什麼是IReportingService.GetTradeUKKPITradesmen'的'的定義,什麼是'model.SelectedSunday'的類型?不知怎的,我不認爲後者是'TradeUK.Entities.Reporting.KPIResults'。 – 2012-08-16 08:37:17

回答

2

可以正常和第二通過第一種模式中ViewBag然後

@model YourFirstModelClass 

@{ 
    YourSecondModelClass model2 = ViewBag.YourSecondModel; 
} 

而且有了它你有你想要的效果。

所以,當你不使用剃鬚刀,你可以添加主強類型模型是這樣的:

<%@ Inherits="System.Web.Mvc.ViewPage<PrimaryModelClass>" %> 

和第二位的ViewData與之相似,以ViewBag

+0

我在OP中添加了我的視圖代碼,這是正確的嗎?我仍然處於學習過程中,並且還不知道如何。我不使用剃鬚刀。謝謝 – 2012-08-16 09:00:48

+0

我使用一個模型爲兩個報告他們有相同的化妝,所以在我的情況下,它會是SundaysInMonthViewModel?謝謝 – 2012-08-16 09:21:22

+0

不客氣,標記答案爲接受或upvote,如果它有幫助。 – 2012-08-16 09:24:50

3

關於你提到的「第二個問題」:

不,你不能這樣做,只有一個ModelViewData。您應該爲這種情況創建單獨的視圖模型(或使用諸如Tuple之類的東西)。

0

關於你的第二個問題,你可以創建一個模型視圖類與兩個表的屬性'欄。從這個模型類中,您可以查看查看頁面中的數據並將數據保存在特定的表格中。

-1

我在網上找到了這個鏈接,可以爲你做。

https://weblogs.asp.net/dotnetstories/passing-multiple-models-to-a-view-in-an-asp-net-mvc-5-0-application

編輯: -

我已經鏈接到建議傳遞對象的列表來查看,與列表正在由外徑不同的模式,這裏的頁面的例子。

public ActionResult Index() 
    { 
     List<object> model = new List<object>(); 
     model.Add(ctx.ProductCategories.ToList()); 
     model.Add(ctx.Products.ToList()); 

     return View(model); 
    } 
} 

然後在視圖中,您可以再次向下突破的列表個別型號,這裏筆者給出的例子: -

@model IEnumerable<object> 

@{ 

    List<PassingMultipleModelsToAView.ProductCategory> lstPCategory = Model.ToList()[0] as List<PassingMultipleModelsToAView.ProductCategory>; 

    List<PassingMultipleModelsToAView.Product> lstProduct = Model.ToList()[1] as List<PassingMultipleModelsToAView.Product>; 
} 

<h3>Categories</h3> 

<ul> 
    @foreach (var item in lstPCategory) 
    {  
     <li>@item.Name</li> 
    } 
</ul> 

<hr /> 

<h3>Products</h3> 

<ul> 
    @foreach (var item in lstProduct) 
    { 
     <li>@[email protected]</li> 
    } 
</ul> 
相關問題