How to Validate Forms with ASP.NET MVC 2 Data Annotations: Listing 4.

JavaScript to Perform WithinDays Validation in the Client Browser

    <script type="text/javascript">
      Sys.Mvc.ValidatorRegistry.validators["withindays"] = 
        function (rule) {
        // convert prior and subsequent parameters to 
        // milliseconds(multiply by 86400000).
        var prior = rule.ValidationParameters["prior"] * 86400000;
        var subsequent = (rule.ValidationParameters["subsequent"] 
          + 1) * 86400000;
        // Today's date minus the time component 
        var today = Date.parse((new Date()).toDateString()); 
        var priorDateValue = today + prior; // prior is 
                                                          // already negative
        var subsequentDateValue = today + subsequent;
        // we return the function that 
        // actually does the validation
        return function (value, context) {
        //expected date format: mm/dd/yy or mm/dd/yyyy
        var mdy = value.split("/");
        var mm = parseInt(mdy[0]) - 1; // Note month is zero-based
        var dd = parseInt(mdy[1]);
        var yy = parseInt(mdy[2]);
        yy = yy < 30 ? yy + 2000 : yy; // need to make Y2K behavior 
                                                  // conform with .NET
        // Basic validation for day & month because 
        // JS Date function allows higher/lower values
        // Yes, I know Feb has 29 days only during 
        // leap year ... like I said, basic validation.
        if (mm < 12 && dd <= 
          [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][mm]) {
        var inDate = new Date(yy, mm, dd);
        var inDatevalue = inDate.valueOf();
        if (inDatevalue >= 
          priorDateValue && inDatevalue < subsequentDateValue)
        return true;
        }
        return rule.ErrorMessage;
       };
     };
  </script>
comments powered by Disqus

Featured

  • Creating Reactive Applications in .NET

    In modern applications, data is being retrieved in asynchronous, real-time streams, as traditional pull requests where the clients asks for data from the server are becoming a thing of the past.

  • AI for GitHub Collaboration? Maybe Not So Much

    No doubt GitHub Copilot has been a boon for developers, but AI might not be the best tool for collaboration, according to developers weighing in on a recent social media post from the GitHub team.

  • Visual Studio 2022 Getting VS Code 'Command Palette' Equivalent

    As any Visual Studio Code user knows, the editor's command palette is a powerful tool for getting things done quickly, without having to navigate through menus and dialogs. Now, we learn how an equivalent is coming for Microsoft's flagship Visual Studio IDE, invoked by the same familiar Ctrl+Shift+P keyboard shortcut.

  • .NET 9 Preview 3: 'I've Been Waiting 9 Years for This API!'

    Microsoft's third preview of .NET 9 sees a lot of minor tweaks and fixes with no earth-shaking new functionality, but little things can be important to individual developers.

  • Data Anomaly Detection Using a Neural Autoencoder with C#

    Dr. James McCaffrey of Microsoft Research tackles the process of examining a set of source data to find data items that are different in some way from the majority of the source items.

Subscribe on YouTube