2015-10-11 58 views
0

我有一個帶有3個圖表的cshtml頁面。爲了生成圖表的數據,我有3種不同的方法,但它們都採用相同的參數。所以我創建了以下模型。在MVC 5 Razor中,你如何將不同的模型傳遞給控制器​​?

public class ChartParameterModel 
{ 
    [Required] 
    public String BankID { get; set; } 

    [Required] 
    public String CompanyID { get; set; } 

    [Required] 
    public DateTime StartDate { get; set; } 

    [Required] 
    public DateTime EndDate { get; set; } 

    public Boolean PercentByItemCount { get; set; } 
} 

控制器爲我的網頁有以下作用:

public ActionResult GetCharts(ChartParameterModel model) 
{ 
    return View(ChartDataController.GetChartData(model.BankID, model.CompanyID, model.StartDate, model.EndDate, model.PercentByItemCount));    
} 

在CSHTML頁面看來你只能有1個模型。所以我不確定如何去通過ChartParameter模型說一個按鈕點擊,然後找回我的圖表數據。

如果我硬編碼ChartParameterModel它工作正常。只需要從cshtml中獲取值即可。

謝謝!

編輯:

這裏是視圖:

@model IEnumerable<IEnumerable<SeriesDataItem>> 

@{ 
    ViewBag.Title = "Dashboard Home"; 
} 

<div class="chart-wrapper"> 
      @(Html.Kendo().Chart(Model.First()) 
       .Name("chtItemsByType") 
       .Title(title => title 
        .Text("Items By Type") 
        .Position(ChartTitlePosition.Top) 
       ) 
       .Legend(legend => legend 
        .Position(ChartLegendPosition.Left) 
       ) 
       .Series(series => 
       { 
        series.Pie(
         model => model.ItemCount, 
         model => model.ItemType, 
         null, 
         model => model.Exploded 
         ) 
         .Labels(labels => labels 
          .Visible(true) 
          .Template("#= dataItem.ItemCount#") 
         ) 
         .Tooltip(tooltip => tooltip 
          .Visible(true) 
          .Template("#= dataItem.ItemAmountDisplay# #= dataItem.YValue# %") 
         );       
       }) 
       .Theme("Bootstrap") 
       .HtmlAttributes(new { style = "height:100%;" })   
      ) 
     </div> 
+0

很難理解你的問題是什麼。如果您有基於您的模型的視圖,那麼模型的屬性將被髮送到控制器。展示你的觀點。 –

+0

也許我必須包含參數作爲系列數據的一部分?或者在那個模型的某個地方? – Cef

+1

在您編輯之前,您如何看待任何人會知道您使用'Kendo.Chart'?如果您在視圖中需要「IEnumerable >」和「ChartParameterModel」,則使用包含2個屬性的視圖模型,每個模型一個 –

回答

0

頭孢, 是,視圖模型可以是根據要求的不同。即您可以定義「動態」類型的模型。

因此,可以有多個針對相同視圖但不同模型的操作方法。另外,如果您的模型的所有屬性都具有相同的所有屬性,但對於某些屬性不同,則可以包含'dynamic'類型的其他屬性,它們將接受運行時決定的數據。另外,如果所有動作都需要所有屬性相同,但只有一些附加值會有所不同,則可以保持視圖模型相同,但不同的屬性可以作爲ViewBag值傳遞。

0

下面是做這件事:

$.ajax({ 
     url: '@Url.Action("GetCharts", "Dashboard")', 
     type: 'POST', 
     dataType: 'json', 
     cache: false, 
     data: { 
       BankID: "48", 
       CompanyID: "0", 
       StartDate: "1/1/2001", 
       EndDate: "2/2/2002", 
       PercentByItemCount: false        
       }, 
     }); 

然後它不應該的問題是什麼型號的視圖引用。

相關問題