减去两个ViewBag值

时间:2019-03-18 13:55:19

标签: c# asp.net-mvc-5

不确定这是否是正确的方法。但是,我在视图上有两个文本框,这些文本框由控制器的Viewbag填充。它们是int值。一个值是库存的单位数(Viewbag.stock),另一个是订购的单位数(Viewbag.ordered)。我有第三个文本框,我想显示Viewbag.Stock - Viewbag.Ordered的值。

我尝试在控制器中执行此操作,但这并没有带来结果。我还尝试在文本框的值中执行此操作,但这也不起作用。

这是我尝试完成此操作的第一种方法

型号

        public int? OnHand { get; set; }
        public int? UnitsOrdered { get; set; }

控制器

        ViewBag.Stock = r.FirstOrDefault().OnHand;
        ViewBag.Ordered = r.FirstOrDefault().UnitsOrdered;
        ViewBag.Total = ViewBag.Stock - ViewBag.Ordered;

查看

        <div class="form-group">
        @Html.LabelFor(model => model.UnitsOrdered, (string)"Units On Hand ", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">              
            @Html.TextBox("OnHand", null, new { @class = "form-control", Value = ViewBag.Stock, @readonly = "readonly" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.UnitsOrdered, (string)"Number of Units Ordered", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.UnitsOrdered, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly" } })
            @ViewBag.MyCountIntro @ViewBag.MyCount
            @Html.ValidationMessageFor(model => model.UnitsOrdered, "", new { @class = "text-danger" })

        </div>
    </div>

            <div class="col-md-10">
            @Html.TextBox("Remaining", null, new { @class = "form-control", Value = ViewBag.Total, @readonly = "readonly" })
            </div>

在上述情况下,Viewbag.Stock是60。Viewbag.Ordered是2。Viewbag.Total应该是58。但是,它是空白

我也试图在视图本身中计算这个。这也会产生一个空白。

            <div class="col-md-10">
            @Html.TextBox("Remaining", null, new { @class = "form-control", Value = ViewBag.Stock - Viewbag.Ordered, @readonly = "readonly" })
        </div>

2 个答案:

答案 0 :(得分:3)

ViewBag本身会将值视为对象。计算之前,应将该对象转换为适当的类型。

ViewBag.Total = (int)ViewBag.Stock - (int)ViewBag.Ordered;

答案 1 :(得分:3)

您可以添加视图模型,而不使用ViewBag(请参见ViewModels or ViewBag?):

class MyViewModel { 
    public int Ordered {get; set;}
    public int Stock {get; set;}
    public int Total => Stock - Ordered;
}

这将是一个更具可维护性的代码,因为它将允许轻松地进行重构,键入成员等。