Я работаю над приложением ASP.NET MVC 5. Я использую атрибуты для проверки моих моделей (back-and frontend).ASP.NET MVC ValidationAttribute вызывает неверные правила проверки на стороне клиента
Один из моих моделей имеет свойство, которое выглядит следующим образом:
[Required(...)]
[Range(0d, Double.MaxValue, ...)]
public Decimal Amount { get; set; }
Все значения от 0 до Double.MaxValue позволены в количестве. (Это отлично работает во внутреннем интерфейсе)
В моем UI У меня есть форма для этой модели:
@using (Html.BeginForm(null, null, FormMethod.Post))
{
@* Anti Forgery Token *@
@Html.AntiForgeryToken()
<fieldset>
...
<section>
@Html.LabelFor(model => model.Amount, new { @class = "label" })
<label class="input">
@Html.EditorFor(model => model.Amount, new { htmlAttributes = new { placeholder = Resources.Amount } })
@Html.RenderCombinedValidationMessages(x => x.Amount, false)
</label>
</section>
</fieldset>
@Html.RenderGlobalValidationMessages()
<footer>
<div class="btn-group">
<a href="@Html.GetPreviousPage(Url.Action("Index", "Controller"))" class="btn btn-default">@Resources.Back</a>
<button type="submit" class="btn btn-primary">@Resources.Create</button>
</div>
</footer>
}
Этот код создает HTML, который выглядит следующим образом:
<form action="/Controller/Create" class="smart-form" method="post" novalidate="novalidate">
<fieldset>
<section>
<label class="label" for="Amount">Amount</label>
<label class="input">
<input
data-val="true" data-val-number="The field Amount must be a number."
data-val-range="Amount must be between 0 and 1.79769313486232E+308."
data-val-range-max="1.79769313486232E+308"
data-val-range-min="0"
data-val-required="Amount is required."
id="Amount" name="Amount" placeholder="Amount" type="text" value="">
<ul class="validationMessageList" data-property-name="Amount"></ul><span class="field-validation-valid" data-valmsg-for="Amount" data-valmsg-replace="true"></span>
</label>
</section>
</fieldset>
<footer>
<div class="btn-group">
<a href="http://localhost:26165/Controller/Create" class="btn btn-default">Back</a>
<button type="submit" class="btn btn-primary">Create</button>
</div>
</footer>
</form>
Теперь проблема:
На основе атрибутов проверки HtmlHelper создает правило проверки jQuery для максимального диапазона: data-val-range-max = "1.79769313486232E + 308". Это приводит к тому, что jQuery проверяет, разрешено ли только значения от 0 до 1.79 .... (значения меньше 2)
Как это исправить?
Bro»это будет работать. десятичная цифра составляет от -79,228,162,514,264,337,593,543,950,335 и 79,228,162,514,264,337,593,543,950,335. Вы хотите> 0 значений. Это сработает. 1000% –
Вот почему я прокомментировал его о десятичном MaxValue. Что Double.MaxValue связано с тем, что вы пытаетесь достичь? –
Извините, что вы правы. Я тестировал его снова, и он работал ... (Я сделал глупую ошибку в своем предыдущем тесте, я использовал d (Double) вместо M (Decimal) ..., что привело к исключению переполнения) – musium