Вопрос:

Asp.net MVC рассчитывается поле в форме редактирования

c# asp.net-mvc knockout.js

522 просмотра

2 ответа

22 Репутация автора

Я пытаюсь создать приложение asp.net MVC. В классе worker.cs я добавил следующие параметры:

 public class Worker
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public double Net { get; set; }
    [Editable(false)][NotMapped]
    public double Gross
    {
        get {
            if (Net <= 282.10 && Net > 0)
                return Math.Round(Net / 0.91, 2);
            else if (Net <= 335.30 && Net > 282.10)
                return Math.Round((Net - 46.5) / 0.76, 2);
            else if (Net <= 760 && Net > 335.3)
                return Math.Round((Net - 75) / 0.685, 2);
            else if (Net > 760)
                return Math.Round((Net / 0.76), 2);
            else
                return 0;
        }

    }
}

Параметр брутто должен быть только для чтения. Мой вопрос касается формы редактирования, мне нужно показать валовую стоимость, затем пользователь вводит чистую стоимость (в реальном времени). Я пытался использовать knockout.js, но я не могу понять, как это сделать. введите описание изображения здесь

div class="form-group">
            @Html.LabelFor(model => model.Net, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Net, new { htmlAttributes = new { @class = "form-control", data_bind = "value: NetV, valueUpdate:'afterkeydown'" } })
                @Html.ValidationMessageFor(model => model.Net, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Gross, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
               @Html.TextBoxFor(model => model.Gross, new { @class = "form-control", data_bind="value:GrossV",@readonly = "readonly", disabled = "disabled" })

            </div>
        </div>
Автор: Laurynas Источник Размещён: 05.03.2017 01:51

Ответы (2)


0 плюса

21 Репутация автора

Это то, что нужно вычислять на стороне клиента (используя javascript), а не на стороне сервера, если вы хотите, чтобы валовая цифра отображалась в реальном времени.

Для этого вам понадобится прослушиватель событий на входе «Net». Что-то вроде этого:

$('#net-input').change(function() {
    var gross;
    var net = $(this).val;
    // ..calculate gross..
    $('gross-input').val(gross);
}
Автор: windowtint Размещён: 05.03.2017 02:24

3 плюса

334 Репутация автора

Решение

KnockoutJS Следуйте структуре MVVM, чтобы вы могли просто поместить расчет в модель представления.

ViewModel: -

var viewModel = function(data) {
   var self = this;
   self.net = ko.observable();
   self.gross = ko.computed(function() {
         if (self.net () <= 282.10 && self.net () > 0)
                return parseFloat(self.net () / 0.91).toFixed(2);
            else if (self.net () <= 335.30 && self.searchQuantity1 () > 282.10)
                return parseFloat((self.net () - 46.5) / 0.76).toFixed(2);
            else if (self.net () <= 760 && self.net () > 335.3)
                return parseFloat((self.net () - 75) / 0.685).toFixed(2);
            else if (self.net () > 760)
                return parseFloat(self.net () / 0.76).toFixed(2);
            else
                return 0;
    }, self);
};

ko.applyBindings(new viewModel());

Посмотреть:-

Net:-

<input id="test1" name="test1" type="text" data-bind="value: net, valueUpdate:'afterkeydown'"/>

<p>Gross: <span id="spantest3" data-bind="text: gross"></span></p>

Смотрите jsfiddle That Working пример !!

Надеюсь, что его работа!

Haapy Coding !!!

Автор: Dhiren Patel Размещён: 05.03.2017 02:29
Вопросы из категории :
32x32