Вычитание двух значений ViewBag - PullRequest
3 голосов
/ 18 марта 2019

Не уверен, что это правильный путь.Но у меня есть два текстовых поля в представлении, которые заполняются Viewbag из контроллера.Они являются значениями int.Одно значение - это количество единиц на складе (Viewbag.stock), а другое - количество заказанных единиц (Viewbag.ordered).У меня есть третье текстовое поле, в котором я хочу показать значение Viewbag.Stock - Viewbag.Ordered.

Я пытался сделать это в контроллере, но результат не вернулся.Я также попытался сделать это в значении текстового поля, и это также не сработало.

Это первый способ, которым я попытался выполнить эту

Модель

        public int? OnHand { get; set; }
        public int? UnitsOrdered { get; set; }

controller

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

View

        <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>

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

Вы можете добавить модель представления вместо использования ViewBag (см. ViewModels или ViewBag? ):

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

Это будет гораздо более понятный код, поскольку он позволитпростой рефакторинг, набранный член и т. д.

3 голосов
/ 18 марта 2019

ViewBag сам будет обрабатывать значение как объект.Вы должны привести этот объект к соответствующему типу, прежде чем выполнять вычисления.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...