Giter VIP home page Giter VIP logo

Comments (3)

dahlbyk avatar dahlbyk commented on July 16, 2024

As a starting point you might try to reproduce in the demo app? It seems like it should Just Work.

from aspnet-client-validation.

shapeh avatar shapeh commented on July 16, 2024

@dahlbyk - I have tried to do just that but that also fails.
Added the following to Checkboxes.cshtml.cs

    public class InputModel
    {
        [Required] // <- added this
        public bool IsChecked { get; set; }
    }

Result:

Recording.2023-10-13.204318.mp4

from aspnet-client-validation.

shapeh avatar shapeh commented on July 16, 2024

For anyone interested, I solved this way:

model:

public class ContactFormModel
{
    [Required]
    public string Name { get; set; }        
    [Required]
    public string Email { get; set; }
    [Required]
    public string Message { get; set; }
    [EnforceTrue]  // notice this custom dataattribute
    public bool AcceptTerms { get; set; }

    public string Phone { get; set; }
}

EnforceTrueAttribute.cs:

public class EnforceTrueAttribute : ValidationAttribute, IClientModelValidator
{
    public override bool IsValid(object value)
    {
        if (value == null) return false;
        if (value.GetType() != typeof(bool)) throw new InvalidOperationException("can only be used on boolean properties.");
        return (bool)value;
    }

    public void AddValidation(ClientModelValidationContext context)
    {
        MergeAttribute(context.Attributes, "data-val", "true");
        MergeAttribute(context.Attributes, "data-val-enforcetrue", "this is required");
    }

    private void MergeAttribute(IDictionary<string, string> attributes,
        string key,
        string value)
    {
        if (attributes.ContainsKey(key))
        {
            return;
        }
        attributes.Add(key, value);
    }
}

javascript for client-side validation

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/aspnet-validation.min.js" integrity="sha256-YhPSMdgpaezx88YOmwT4iX+obLI+90odW6zX90RqivI=" crossorigin="anonymous"></script>

<script>
    const v = new aspnetValidation.ValidationService();
    v.bootstrap({ watch: true });
    v.addProvider('enforcetrue', (value, element, params) => {
        return element.checked;
    });
</script>

from aspnet-client-validation.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.