不确定这是否是正确的方法。但是,我在视图上有两个文本框,这些文本框由控制器的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>
答案 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;
}
这将是一个更具可维护性的代码,因为它将允许轻松地进行重构,键入成员等。