Не уверен, что это правильный способ сделать это. Но у меня есть два текстовых поля в представлении, которые заполняются 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>





Сам ViewBag будет рассматривать значение как объект. Вы должны привести этот объект к соответствующему типу, прежде чем выполнять вычисления.
ViewBag.Total = (int)ViewBag.Stock - (int)ViewBag.Ordered;
Вы можете добавить модель представления вместо использования ViewBag (см. ViewModels или ViewBag?):
class MyViewModel {
public int Ordered {get; set;}
public int Stock {get; set;}
public int Total => Stock - Ordered;
}
Это будет гораздо более удобный код, так как он позволит легко рефакторировать, типизировать член и так далее.
Спасибо @Adriani6. Это решение, которое я использовал. Хотя оба решения были великолепны. . . а другой был, может быть, немного более правильным. Ваше решение было простым для понимания и лучшим для решения проблемы, как я начал. Спасибо