4

Я работаю над приложением 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)

Как это исправить?

ответ

2

Один из способов, который я знаю, это:

 [Range(typeof(decimal), "0", "79228162514264337593543950335")] 
     public decimal Amount { get; set; } 

Мех-иш, но это реальное дело.

И десятичного MaxValue является 79228162514264337593543950335. https://msdn.microsoft.com/en-us/library/system.decimal.maxvalue(v=vs.110).aspx

+0

Bro»это будет работать. десятичная цифра составляет от -79,228,162,514,264,337,593,543,950,335 и 79,228,162,514,264,337,593,543,950,335. Вы хотите> 0 значений. Это сработает. 1000% –

+0

Вот почему я прокомментировал его о десятичном MaxValue. Что Double.MaxValue связано с тем, что вы пытаетесь достичь? –

+0

Извините, что вы правы. Я тестировал его снова, и он работал ... (Я сделал глупую ошибку в своем предыдущем тесте, я использовал d (Double) вместо M (Decimal) ..., что привело к исключению переполнения) – musium

Смежные вопросы