У меня есть модель домена заказа на ремонт. Вот только три из его свойств:Как правильно форматировать значение readtly @TextBoxFor Value в качестве валюты?
[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;
После того как я Scaffolded контроллера и просмотров я модифицировал 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>
Если я удалить Value = string.Format…
часть линии. Все значки отображаются отлично, и я могу внести изменения и сохранить запись. С оставшимся Value = string.Format…
мои значения отформатированы правильно, но я не могу сохранить никаких изменений. Он жалуется, что все три строки не являются числовыми (никаких значков запятой или доллара). Я вынул строку Validate, но это не помогло, и не переключилось на @EditorFor
.
Спасибо заранее,
Edit:
Рабочая, но не отформатирована для валюты:
<div class="form-group">
<label class="control-label col-md-2" for="LaborTotal">Labor Total</label>
<div class="col-md-10">
<input 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 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 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>
С попытке форматирования для валюты:
<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>
Вы можете поделиться предоставленным html. т. е. html, который вы получили от этой бритвы – lazy
Это достаточно, @lazy? Меня обвиняют в том, что я слишком много задаю вопросы. – Randy
Спасибо за публикацию HTML. Похоже, что если мы используем редактор For, он должен установить html-ввод как десятичный, а затем использовать формат даты, который будет корректно отформатировать значение. Кроме того, для форматирования вы можете использовать CSS, как указано в этом примере stackoverflow - http://stackoverflow.com/questions/5080451/how-should-i-use-editorfor-in-mvc-for-a-currency-money-type – lazy