如何在视图中相乘

时间:2015-05-14 13:57:44

标签: asp.net-mvc razor

如何在视图中相乘?或者有最佳实践?项目 - 汽车租赁。 我的控制器采用参数int numberDays。 我需要计算所有日期的View总价。需要在一天内将价格乘以天数。然后,此参数必须以控制器的形式传递。

public ActionResult DayView(int numberDays)
{
         //
}

在foreach中查看我显示数字车,彩色车等......

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

<p>Full Price</p>:@(car.CostOneDay * Model.NumberOfDays)此参数如何在hiddenfor中添加,我需要将此表单传递给控制器​​

2 个答案:

答案 0 :(得分: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,您就可以访问计算出的属性。

答案 1 :(得分: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; }
}

然后为控制器中的每个汽车记录设置FullPrice属性

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);
}

并使用@Html.HiddenFor,如下所示

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