2017-03-05 99 views
1

我想创建asp.net mvc应用程序。在worker.cs类中,我添加了这些参数:Asp.net mvc计算字段编辑形式

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,但我不知道如何做到这一点。 enter image description here

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> 

回答

3

KnockoutJS按照MVVM结构,这样你们可以只是把计算的视图模型。

视图模型: -

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该工作例子!

希望它的工作!

Haapy Coding !!!

+0

有没有办法从数据库蚂蚁显示获得净值作为默认的可观察值? – Laurynas

+0

@Laurynas从控制器传递简单的值并使用@ Html.TextBoxFor(model => model.net,new {data_bind =“value:net”}); –

+0

我已经使用这个设置:@ Html.EditorFor(model => model.Net,new {htmlAttributes = new {@class =“form-control”,data_bind =“value:net,valueUpdate:'afterkeydown'”}} ),everythink工作,但默认值显示空的文本框 – Laurynas

0

这是一些需要客户端(使用JavaScript)来计算,而不是服务器端,如果你想总身影出现在实时。

要做到这一点,您需要在“网络”输入上的事件侦听器。事情是这样的:

$('#net-input').change(function() { 
    var gross; 
    var net = $(this).val; 
    // ..calculate gross.. 
    $('gross-input').val(gross); 
}