目立たない検証では、データ型が区別されません。MVC がすべての数値フィールドに追加する「数値」検証のみがあります。
これには、1.2345 が有効な整数であるという望ましくない影響があります。送信すると、MVC バインダーは値を解析できません。したがって、クライアント側のエラーを取得する代わりに、サーバーから取得します。
これを解決する最善の方法は何ですか?既存のソリューションはありますか?
目立たない検証では、データ型が区別されません。MVC がすべての数値フィールドに追加する「数値」検証のみがあります。
これには、1.2345 が有効な整数であるという望ましくない影響があります。送信すると、MVC バインダーは値を解析できません。したがって、クライアント側のエラーを取得する代わりに、サーバーから取得します。
これを解決する最善の方法は何ですか?既存のソリューションはありますか?
わかりました、これが私がしたことです。
Int32用の独自のEditorTemplate(Views / Shared / EditorTemplates / Int32.cshtml)を作成しました。
@model int?
@Html.TextBox("", Model.HasValue ? Model.Value.ToString() : "", new { data_val_integer = "Field must be an integer" })
検証アダプターを追加しました(これを$(document).readyで実行します:)
jQuery.validator.addMethod('integer',
function (value, element, params) {
return String.IsNullOrEmpty(value) || isInteger(value);
});
jQuery.validator.unobtrusive.adapters.add("integer", [],
function (options) {
options.rules['integer'] = {};
options.messages['integer'] = options.message;
});
isInteger
このように見えるJavascript関数を書きました
function isInteger(value) {
return parseInt(value, 10) == value;
}
これで、整数フィールドは、小数点以下のドットを含むものを入力すると、「フィールドは整数でなければなりません」という素晴らしいメッセージを表示します。
より良い方法を聞いて喜ぶでしょう。