2015-05-14 29 views
1

如何在視圖中相乘?或者有最佳實踐?項目 - 汽車租賃。 我的控制器需要參數int numberDays。 我需要計算View上所有日子的總價格。需要在一天內將價格乘以天數。然後這個參數必須以控制器的形式傳遞。如何在視圖中相乘

public ActionResult DayView(int numberDays) 
{ 
     // 
} 

鑑於我的foreach顯示numbercar,colorcar等...

@model IEnumerable<Car> 
foreach (Car car in Model) 
{ 
    //other parameters 
    <p>Full Price</p>:Model.CostOneDay  //need multiply numberDays 
} 

這個參數hiddenfor如何<p>Full Price</p>:@(car.CostOneDay * Model.NumberOfDays)增加,我需要通過這個形式給控制器

+1

你可以定義一個自定義的類,而不是你的模型是IEnumerable 有額外的屬性。此時,您只需訪問該屬性。 –

+0

是的,@EricHotinger說。新的類將是一個[ViewModel](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) – Liam

+0

你可以使用[calculated property](http://stackoverflow.com/questions/2030636/c-sharp-read-only-calculated-properties-should-they-be-methods),但我發現這些只會導致更多的問題,而不是他們長期解決的問題。把你的控制器計算成虛擬機 – Liam

回答

1

您可以創建一個包含CarsNumberOfDays財產

public class MyViewModel 
{ 
    public IEnumerable<Car> Cars { get; set; } 
    public int NumberOfDays { get; set; } 
} 

然後用它在你的控制器,並把它傳遞給視圖

public ActionResult DayView(int numberDays) 
{ 
    MyViewModel model = new MyViewModel(); 
    model.NumberOfDays = numberDays; 
    model.Cars = ...; // get the car records here 

    return View(model); 
} 

,改變你的看法如下

視圖模型類
@model MyViewModel 
foreach (Car car in Model.Cars) 
{ 
    //other parameters 
    <p>Full Price</p>:@(car.CostOneDay * Model.NumberOfDays) 
} 

編輯

如果您想使用@Html.HiddenFor中的乘數價格,那麼您需要爲您的Car類添加一個附加屬性。假設CostOneDay類型是小數,添加FullPrice屬性與小數類型

public class Car 
{ 
    // other properties 

    public decimal FullPrice { get; set; } 
} 

然後在控制器

public ActionResult DayView(int numberDays) 
{ 
    MyViewModel model = new MyViewModel(); 
    model.NumberOfDays = numberDays; 
    model.Cars = ...; // get the car records here 

    foreach (var car in model.Cars) 
    { 
     car.FullPrice = car.CostOneDay * model.NumberOfDays; 
    } 

    return View(model); 
} 

設置FullPrice屬性爲每個汽車記錄,並使用@Html.HiddenFor像下面

@model MyViewModel 
foreach (Car car in Model.Cars) 
{ 
    //other parameters 
    <p>Full Price</p>:@car.FullPrice 
    @Html.HiddenFor(m => car.FullPrice) 
} 
+0

太棒了!謝謝!以及現在如何在hiddenFor中添加@(car.CostOneDay * Model.NumberOfDays)?我需要通過控制器的這種形式 – andrey1567

+0

看到我更新的答案。 – ekad

1

爲了擴大我發佈的評論,現在你的控制器看起來像這樣:

public ActionResult DayView(int numberDays) 
{ 
    // returns View with IEnumerable 
} 

你想改變這個是這樣的,利用一個新的類,CalculatedDayViewModel(命名這個更好) - 並讓該類將計算的字段作爲屬性。一定要設置一個構造函數,允許您傳入numberDays並進行計算。

public ActionResult DayView(int numberDays) 
{ 
    return View(new CalculatedDayViewModel(numberDays)); 
} 

然後在你的剃鬚刀,改變@model IEnumerable<Car>@model CalculatedDayViewModel,你將有機會獲得的計算性能。