ビューでは、ビューモデル用に1つのフォームを作成しました。Twitter Bootstrap Wizardプラグインを使用して、フォームを複数のセクションに分割しました。ユーザーは「次へ」ボタンをクリックして次のセクションにアクセスできます。各セクションには、そのセクションのモデルプロパティに対して定義されたFluent ValidationRuleSetがあります。各RuleSetで定義したルールは、FluentValidaitonのクライアント側の検証と互換性があります。
次のボタンをクリックすると、最善の方法は何ですか。
FluentValidationスタートガイドとこの質問を読みました。彼らは私がサーバー側で探しているものを達成する方法を示していますが、クライアント側の質問に対処していないようです。私はFluentValidationとMVCにかなり慣れていないので、太字で「見える」ので、リンクの内容を誤解している可能性があります。
FluentValidationが使用するjQuery検証ライブラリのコマンドを使用できます。
フォームの要素で、検証グループの認識に役立つ属性を定義します。例えば
@Html.EditorFor(model => model.GroupA_TextA, new { htmlAttributes = new { @class = "form-control", data_validation_group = "GroupA" }})
.settings.ignore
jQuery検証ライブラリの構文を使用して、検証するグループを制御します。
FluentValidation検証済みフォーム内のグループとその全体を検証する機能を公開するクラスを作成しました。以下にTypeScriptとトランスパイルされたJavaScriptを含めました。
TypeScript
/**
* For validating a form when Fluent Validation is used for model valdiation.
*/
interface IFluentValidationFormValidator {
/**
* The form to validate.
*/
form: JQuery<HTMLElement>;
/**
* The name of the validation group to validate.
*/
group: string;
/**
* Validate the entire form.
*/
validate(): boolean;
/**
* Validate a validation group in the form.
* @param group The name of the validation group to validate.
*/
validateGroup(): boolean;
}
/**
*
*/
class StandardFluentValidationFormValidator implements IFluentValidationFormValidator {
/**
* @inheritdoc
*/
form: JQuery<HTMLElement>;
/**
* @inheritdoc
*/
group: string;
/**
* @inheritdoc
*/
validate(): boolean {
const formValidator = this.form.validate();
formValidator.form();
return formValidator.valid();
}
/**
* @inheritdoc
*/
validateGroup(): boolean {
// The form validator.
const formValidator = this.form.validate();
// Perform standard validation on form if the validation group is undefined.
if (this.group === undefined) {
formValidator.form();
return formValidator.valid();
}
// Current group validation settings.
const initialValidateIgnoreSetting = formValidator.settings.ignore;
// Ignore all elements but the group.
formValidator.settings.ignore += `,:not([data-validation-group=${this.group}])`;
// Valdiate the form.
formValidator.form();
// Reset group validation settings.
formValidator.settings.ignore = initialValidateIgnoreSetting;
// Return the validation state.
return formValidator.valid();
}
}
JavaScript
"use strict";
var StandardFluentValidationFormValidator = (function () {
function StandardFluentValidationFormValidator() {
}
StandardFluentValidationFormValidator.prototype.validate = function () {
var formValidator = this.form.validate();
formValidator.form();
return formValidator.valid();
};
StandardFluentValidationFormValidator.prototype.validateGroup = function () {
var formValidator = this.form.validate();
if (this.group === undefined) {
formValidator.form();
return formValidator.valid();
}
var initialValidateIgnoreSetting = formValidator.settings.ignore;
formValidator.settings.ignore += ",:not([data-validation-group=" + this.group + "])";
formValidator.form();
formValidator.settings.ignore = initialValidateIgnoreSetting;
return formValidator.valid();
};
return StandardFluentValidationFormValidator;
}());
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加