提问人:ExecChef 提问时间:3/18/2019 最后编辑:Thomas AyoubExecChef 更新时间:3/18/2019 访问量:547
减去两个 ViewBag 值
Subtracting Two ViewBag Values
问:
不确定这是否是正确的方法。但是,我在视图上有两个文本框,它们由控制器中的 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>
答:
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;
}
这将是一个更易于维护的代码,因为它允许轻松重构、类型化成员等。
评论