モデル内のプロパティにRangeValidator
があり、0〜100の整数しか使用できません。jQuery UIダイアログを使用してプロパティを更新するためのフォームを表示する部分ビューがあります。私はソースを見て、データ注釈属性が正しく生成されていることを確認できます。ただし、検証は正しく機能していません。何らかのバリデーションを実行しますが、設定している範囲を使用していません。値1,10、および100はエラーを生成しません。他の1桁または2桁の値はエラーを生成します。しかし、私が0で詰め込むと、100未満の値はすべて問題ありません。MVCデータアノテーションの範囲の検証が正しく機能しない
モデル:
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
を変更した場合EditorFor
それはnumber
に変わるが、私はまだ同じ動作を参照してください。
これはjqueryの変更を壊す問題です。http://stackoverflow.com/questions/14889431/client-side-validation-trips-on-dataannotation -range-attribute – felickz