19

モデルにRangeValidatoron a プロパティがあり、0 から 100 までの整数のみを許可しています。jQuery UI ダイアログを介してプロパティを更新するフォームを表示する部分ビューがあります。ソースを確認したところ、データ注釈属性が適切に生成されていることが確認できました。ただし、検証は正しく機能していません。何らかの検証を実行しますが、設定している範囲を使用していません。値 1、10、および 100 ではエラーは発生しません。それ以外の 1 桁または 2 桁の値では、エラーが発生します。ただし、ゼロをパディングすると、100 未満の値はすべて問題ありません。

モデル:

public class MyModel
{
  ...
  [Required(ErrorMessage = "{0} is required")]
  [Range(typeof(int), "0", "100", 
         ErrorMessage = "{0} can only be between {1} and {2}")]
  public int Percentage { get; set; }
  ...
}

部分図:

@model MyApp.Models.Partials.MyModel

<div id="myDialog" class="editModal" title="Update Percentage">
  @using (Ajax.BeginForm("UpdatePercentage", "MyController", 
                         new AjaxOptions() { HttpMethod = "Post", 
                                             OnSuccess = "onUpdateSuccess" }, 
                         new { name = "myForm" }))
  {
    @Html.ValidationSummary(null, new { style = "width:auto;max-width:22em;               
                                                 float:left;clear:both;" })    
    <div style="width:auto;float:left;clear:both;">
      <div style="width:10em;float: left;text-align:right;clear:left;">
        @Html.Label("Percentage:")
      </div>
      <div style="width:12em;margin-left:1em;float:left;clear:right;">
        @Html.TextBoxFor(m => m.Percentage)
      </div>
    </div>
    <div style="width:23em;clear:both;text-align:center;">
      <hr />
      <input type="button" value="Cancel" class="cancelModalButton" 
             data-modal="myDialog" />
      <input type="submit" value="Submit" class="submitModalButton" 
             data-modal="myDialog" data-form="myForm" />
    </div>
  }
</div>

作成されたマークアップ:

<div id="myDialog" class="editModal" title="Update Percentage">
  <form action="/Web/MyController/UpdatePercentage?Length=3" 
        data-ajax="true" data-ajax-method="Post" data-ajax-success="onUpdateSuccess" 
        id="form2" method="post" name="myForm">
    <div class="validation-summary-valid" data-valmsg-summary="true" 
         style="width:auto;max-width:22em;float:left;clear:both;">
      <ul>
        <li style="display:none"></li>
     </ul>
    </div>
    <div style="width:auto;float:left;clear:both;margin-bottom:.75em;">
      <div style="width:10em;float: left;text-align:right;clear:left;">
        <label for="Percentage:">Percentage:</label>
      </div>
      <div style="width:12em;margin-left:1em;float:left;clear:right;">
        <input data-val="true" data-val-number="The field Percentage must be a number." 
               data-val-range="Percentage can only be between 0 and 100" 
               data-val-range-max="100" data-val-range-min="0" 
               data-val-required="Percentage is required" id="Percentage" 
               name="Percentage" type="text" value="10" />
      </div>
    </div>
    <div style="width:23em;clear:both;text-align:center;">
      <hr />
      <input type="button" value="Cancel" class="cancelModalButton" data-modal="myDialog" />
      <input type="submit" value="Submit" class="submitModalButton" data-modal="myDialog" data-form="myForm" />
    </div>
  </form>
</div>

タイプが に設定されていることがわかります。textに変更すると に変更TextBoxForされますが、それでも同じ動作が見られます。EditorFornumber

4

2 に答える 2

7

私はこの正確な問題を抱えていて、ここで解決策を見つけました。以下をアップグレードする必要があります。

jQuery Validation (少なくとも 1.11.1)
Microsoft jQuery Unobtrusive Validation (少なくとも 2.0.30116.0)
Microsoft jQuery Unobtrusive Ajax (少なくとも 2.0.30116.0)

この問題は、jQuery 1.9.1 の重大な変更によって導入されました。

于 2013-07-17T16:40:44.167 に答える
3

試してみてください[Range(0, 100)]。完全に削除ErrorMessageして、間違ったフォーマットと中括弧で何かを壊していないことを確認します。

純粋な範囲が適切に機能しない場合は、force(MS)を使用してください。:)

于 2013-03-13T03:46:42.573 に答える