C# 减去两个ViewBag值

C# 减去两个ViewBag值,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,不确定这是否是正确的方法。但是,我在一个视图上有两个文本框,由控制器的Viewbag填充。它们是int值。一个值是库存单位数(Viewbag.stock),另一个值是订购单位数(Viewbag.ordered)。我还有第三个文本框,我想显示Viewbag.Stock-Viewbag.Ordered的值 我试着在控制器中这样做,但没有结果。我还尝试在文本框的值中执行此操作,但这也不起作用 这是我第一次尝试实现这一目标 模型 控制器 ViewBag.Stock = r.FirstOr

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

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

这是我第一次尝试实现这一目标

模型

控制器

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


@LabelFor(model=>model.UnitsOrdered,(字符串)“手头上的单位”,htmlAttributes:new{@class=“control label col-md-2”})
@TextBox(“OnHand”,null,new{@class=“form control”,Value=ViewBag.Stock,@readonly=“readonly”})
@LabelFor(model=>model.UnitsOrdered,(字符串)“订购的单元数”,htmlAttributes:new{@class=“control label col-md-2”})
@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”})
@TextBox(“剩余”,空,新{@class=“form control”,Value=ViewBag.Total,@readonly=“readonly”})
在上面的场景中,Viewbag.Stock是60。查看包。订购的是2。查看包。总数应为58。但实际上,它是空白的

我也试着用视图本身来计算这一点。这也会产生一个空白

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

@TextBox(“剩余”,null,新{@class=“form control”,Value=ViewBag.Stock-ViewBag.Ordered,@readonly=“readonly”})

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


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

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


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

谢谢@Adriani6。这就是我使用的解决方案。虽然两种解决方案都很好。另一个可能更合适一点。您的解决方案很容易理解,并且以我开始的方式最好地解决了问题。非常感谢。
        <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>
            <div class="col-md-10">
            @Html.TextBox("Remaining", null, new { @class = "form-control", Value = ViewBag.Stock - Viewbag.Ordered, @readonly = "readonly" })
        </div>
class MyViewModel { 
    public int Ordered {get; set;}
    public int Stock {get; set;}
    public int Total => Stock - Ordered;
}