C# 如何将值设置为货币的只读@textbox格式?

C# 如何将值设置为货币的只读@textbox格式?,c#,razor,format,C#,Razor,Format,我有一个维修订单域模型。以下是它的三个特性: [DataType(DataType.Currency)] [DisplayFormat(DataFormatString = "{0:C}", ApplyFormatInEditMode = true)] [DisplayName("Labor Total")] [ScaffoldColumn(true)] [ReadOnly(true)] public virtual decimal LaborTo

我有一个维修订单域模型。以下是它的三个特性:

    [DataType(DataType.Currency)]
    [DisplayFormat(DataFormatString = "{0:C}", ApplyFormatInEditMode = true)]
    [DisplayName("Labor Total")]
    [ScaffoldColumn(true)]
    [ReadOnly(true)]
    public virtual decimal LaborTotal => Labor.Sum(p => p.LineTotal);

    [DataType(DataType.Currency)]
    [DisplayFormat(DataFormatString = "{0:C}", ApplyFormatInEditMode = true)]
    [DisplayName("Parts Total")]
    [ScaffoldColumn(true)]
    [ReadOnly(true)]
    public virtual decimal PartsTotal => RepairOrderParts.Sum(p => p.LineTotal);

    [DataType(DataType.Currency)]
    [DisplayFormat(DataFormatString = "{0:C}", ApplyFormatInEditMode = true)]
    [DisplayName("Order Total")]
    [ScaffoldColumn(true)]
    [ReadOnly(true)]
    public virtual decimal OrderTotal => LaborTotal + PartsTotal;
在构建控制器和视图之后,我修改了Edit.cshtml,使其包含我的三个货币属性:

    <div class="form-group">
        @Html.LabelFor(model => model.LaborTotal, htmlAttributes: new {@class = "control-label col-md-2"})
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.LaborTotal, new {@class = "form-control", @readonly = "readonly", Value = string.Format("{0:C}", Model.LaborTotal) })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.PartsTotal, htmlAttributes: new {@class = "control-label col-md-2"})
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.PartsTotal, new {@class = "form-control", @readonly = "readonly", Value = string.Format("{0:C}", Model.PartsTotal) } )
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.OrderTotal, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.OrderTotal, new { @class = "form-control", @readonly = "readonly", Value = string.Format("{0:C}", Model.OrderTotal) } )
        </div>
    </div>
尝试设置货币的格式时:

    <div class="form-group">
        <label class="control-label col-md-2" for="LaborTotal">Labor Total</label>
        <div class="col-md-10">
            <input Value="$75.00" class="form-control" data-val="true" data-val-number="The field Labor Total must be a number." data-val-required="The Labor Total field is required." id="LaborTotal" name="LaborTotal" readonly="readonly" type="text" value="75.00" />
        </div>
    </div>

    <div class="form-group">
        <label class="control-label col-md-2" for="PartsTotal">Parts Total</label>
        <div class="col-md-10">
            <input Value="$0.00" class="form-control" data-val="true" data-val-number="The field Parts Total must be a number." data-val-required="The Parts Total field is required." id="PartsTotal" name="PartsTotal" readonly="readonly" type="text" value="0" />
        </div>
    </div>

    <div class="form-group">
        <label class="control-label col-md-2" for="OrderTotal">Order Total</label>
        <div class="col-md-10">
            <input Value="$75.00" class="form-control" data-val="true" data-val-number="The field Order Total must be a number." data-val-required="The Order Total field is required." id="OrderTotal" name="OrderTotal" readonly="readonly" type="text" value="75.00" />
        </div>
    </div>

劳动力总数
零件总数
订单总数

当您在htmlAttributes中执行
Value=string.Format(“{0:C}”,Model.LaborTotal)
时,razor将执行C#code并返回值,
“$86.34”
,(假设
LaborTotal
属性的值为
86.34345M
),这是一个字符串。因此,视图生成的标记将

<input value="$86.34"  id="LaborTotal" name="LaborTotal" readonly="readonly" type="text">
在你的行动中

public ActionResult View(int id)
{
  var vm = new LabelTotalSummaryVm { Id=id };
  var e = yourDbContext.RepairOrders.FirstOrDefault(s=>s==Id);
  if(e!=null) 
  {
     vm.LaborTotal =e.LaborTotal ;
     vm.SomeEditableProperty =e.SomeEditableProperty ;
  }
  return View(vm);
}
在你看来

@model LabelTotalSummaryVm
@using(Html.BeginForm())
{
  @Html.TextBoxFor(s=>s.SomeEditableProperty);
  <label>$ @Model.LaborTotal</label>
  @Html.HiddenFor(s=>s.Id)
  <input type="submit" />
}

你能分享呈现的html吗。i、 你从这个razorIs得到的html足够了,@lazy?有人指责我的问题太多。谢谢你发布HTML。似乎如果我们使用编辑器,它应该将html输入设置为十进制,然后使用日期格式字符串将正确格式化值。此外,对于格式化,您可以使用本stackoverflow示例中给出的CSS-
public class LabelTotalSummaryVm
{
  public int Id {set;get;}
  public decimal LaborTotal {set;get;}      
  public string SomeEditableProperty { set;get;}
}
public ActionResult View(int id)
{
  var vm = new LabelTotalSummaryVm { Id=id };
  var e = yourDbContext.RepairOrders.FirstOrDefault(s=>s==Id);
  if(e!=null) 
  {
     vm.LaborTotal =e.LaborTotal ;
     vm.SomeEditableProperty =e.SomeEditableProperty ;
  }
  return View(vm);
}
@model LabelTotalSummaryVm
@using(Html.BeginForm())
{
  @Html.TextBoxFor(s=>s.SomeEditableProperty);
  <label>$ @Model.LaborTotal</label>
  @Html.HiddenFor(s=>s.Id)
  <input type="submit" />
}
[HttpPost]
public ActionResult View(LabelTotalSummaryVm model)
{
      var e = yourDbContext.RepairOrders.FirstOrDefault(s=>s==Id);
      if(e!=null) 
      {       
         vm.SomeEditableProperty =model.SomeEditableProperty ;
         yourDbContext.Entry(e).State=EntityState.Modified;
         yourDbContext.SaveChanges();
         return RedirectToAction("SomeSuccess");
      }
      return View(vm);
}