Използвам jquery-maskmoney (https://github.com/plentz/jquery-maskmoney) за поле за въвеждане на валута. Когато не използвам маската, въведената стойност се предава на контролера, когато използвам маската, получавам стойността 0.
<div class="form-group">
@Html.LabelFor(model => model.Amount, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(model => model.Amount, new { htmlAttributes = new { @class = "form-control input-width-xlarge"} })
@Html.ValidationMessageFor(model => model.Amount, "", new { @class = "text-danger" })
</div>
</div>
Следното за свързване на полето:
<script>
$(function() {
$("#Amount").maskMoney();
})
</script>
Проблемът е, че когато се използва маската, стойността 0 се връща на контролера, когато не използвам маската, получавам въведената стойност.
Представеният HTML код за полето е
<input data-val="true" data-val-number="The field Amount must be a number." data-val-range="The field Amount must be between 0 and 10000000000." data-val-range-max="10000000000" data-val-range-min="0" data-val-required="The Amount field is required." htmlattributes="{ class = form-control input-width-xlarge }" id="Amount" name="Amount" type="text" value="0">
Методът на контролера е:
public ActionResult Create([Bind(Include = "ReceiptId,DonorId,Amount,CreationDate,CurrencyId,PaymentTypeId,AllocationId,LegacyAllocation,Activity,Diocese,Acknowledgement,Printed,OwnerId,LastUserId,LastUpdated,GiftAid,Notes")] CreateReceiptViewModel crvm)
Опитах да използвам EditorFor вместо TextBoxFor, същия резултат.
Отговори:
2 за отговор № 1РЕШЕНО: Проблемът беше Сума в модела за преглед е десетична, но се връщаше низ, така че не успя да потвърди. Което има смисъл сега мисля за него :)
Решението беше да се въведе ново поле Stringнаречена DisplayAmount в модела на изгледа и я използва в изгледа. Промениха обвързването така, че да потърси DisplayAmount, а в действието си анализира това в сумата.
Моделът изглежда така:
[Required]
[Range(0.0,10000000000)]
public Decimal Amount { get; set; }
[Required(ErrorMessage="Please supply the amount.")]
public String DisplayAmount { get; set; }
Изглед:
<div class="form-group">
@Html.LabelFor(model => model.Amount, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(model => model.DisplayAmount, new { htmlAttributes = new { @class = "form-control input-width-xlarge"} })
@Html.ValidationMessageFor(model => model.DisplayAmount, "", new { @class = "text-danger" })
</div>
</div>
А в действието:
public ActionResult Create([Bind(Include = "ReceiptId,DonorId,DisplayAmount,CreationDate,CurrencyId,PaymentTypeId,AllocationId,LegacyAllocation,Activity,Diocese,Acknowledgement,Printed,OwnerId,LastUserId,LastUpdated,GiftAid,Notes")] CreateReceiptViewModel crvm) {
Decimal amount;
Decimal.TryParse(crvm.DisplayAmount, out amount);
crvm.Amount = amount;