减去两个 ViewBag 值

Subtracting Two ViewBag Values

提问人:ExecChef 提问时间:3/18/2019 最后编辑:Thomas AyoubExecChef 更新时间:3/18/2019 访问量:547

问:

不确定这是否是正确的方法。但是,我在视图上有两个文本框,它们由控制器中的 Viewbag 填充。它们是 int 值。一个值是库存单位数 (),另一个值是订购单位数 ()。我有第三个文本框,我想显示 的值。Viewbag.stockViewbag.orderedViewbag.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>
C# ASP.NET-MVC-5

评论


答:

3赞 Adrian 3/18/2019 #1

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

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

评论

0赞 ExecChef 3/19/2019
谢谢你@Adriani6。这是我使用的解决方案。虽然这两种解决方案都很棒......另一个可能更合适一些。您的解决方案易于理解,并且以我开始的方式解决问题的最佳方式。谢谢
3赞 Thomas Ayoub 3/18/2019 #2

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

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

这将是一个更易于维护的代码,因为它允许轻松重构、类型化成员等。