Лагічнае значэнне Праўда для патрабаванага атрыбуту на MVC .net уласнасці

Як мне патрабуецца значэнне True для булевай ўласцівасці ў MVC 3 з .NET? Гэта дзе я, мне трэба значэнне павінна быць True othewise гэта не дзейнічае

 _
 _
Public Property AcceptAgreement As Boolean

Вось выпраўленне ў выпадку, калі спасылка памірае калі-небудзь

Дадаць гэты клас

Public Class BooleanMustBeTrueAttribute Inherits ValidationAttribute

    Public Overrides Function IsValid(ByVal propertyValue As Object) As Boolean
        Return propertyValue IsNot Nothing AndAlso TypeOf propertyValue Is Boolean AndAlso CBool(propertyValue)
    End Function

End Class

Дадаць атрыбут

 _
 _
 _
Public Property AcceptAgreement As Boolean
4
Я ведаю, што гэта стары, але калі дадаць сваё рашэнне ў якасці адказу, я upvote :)
дададзена аўтар JMK, крыніца

1 адказы

Калі хтосьці зацікаўлены ў даданні праверкі jQuery (так што сцяжок правяраецца як у браўзеры і на сэрверы), вы павінны змяніць клас BooleanMustBeTrueAttribute наступным чынам:

public class BooleanMustBeTrueAttribute : ValidationAttribute, IClientValidatable
{
    public override bool IsValid(object propertyValue)
    {
        return propertyValue != null
            && propertyValue is bool
            && (bool)propertyValue;
    }

    public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        yield return new ModelClientValidationRule
        {
            ErrorMessage = this.ErrorMessage,
            ValidationType = "mustbetrue"
        };
    }
}

У прынцыпе, клас цяпер таксама рэалізуе IClientValidatable і вяртае адпаведнае паведамленне пра памылку JS і атрыбут праверкі JQuery, які будзе дададзены ў поле HTML ( «mustbetrue»).

Зараз, для таго, каб праверкі jQuery на працу, дадайце наступныя JS на старонцы:

jQuery.validator.addMethod('mustBeTrue', function (value) {
    return value;//We don't need to check anything else, as we want the value to be true.
}, '');

// and an unobtrusive adapter
jQuery.validator.unobtrusive.adapters.add('mustbetrue', {}, function (options) {
    options.rules['mustBeTrue'] = true;
    options.messages['mustBeTrue'] = options.message;
});

Note: I based the previous code on the one used in this answer -> Perform client side validation for custom attribute

І гэта ў прынцыпе :)

Памятаеце, што для папярэдніх JS для працы, вы павінны быць уключаны наступныя Js файлы на старонцы:

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

пастскрыптум Калі ён працуе, я б на самой справе рэкамендую дадаць код у JS-файл у тэчцы Scripts, і стварыць пакет з усімі файламі Js.

4
дададзена