Sunday, February 19, 2012

MVC Mask Attribute for Inputs

I created a mask input in previous posts where I declared Jquery as a constant and added it to Scripts collection. Alternate approach can be generate an Id for each mask input and use scripts in EditorTemplate.
MaskAttribute
  1. public void OnMetadataCreated(ModelMetadata metadata)
  2.         {
  3.             metadata.TemplateHint = "_maskInput";
  4.             metadata.AdditionalValues["id"] = Guid.NewGuid();
  5.             metadata.AdditionalValues["mask"] = Mask;
  6.         }
Register mask for input in document ready event.
Views\Shared\EditorTemplates\_maskInput.cshtml
  1. @using MvcLists.Common.CustomAttributes
  2. @model System.String
  3. @{
  4.     var additionalValues = ViewData.ModelMetadata.AdditionalValues;
  5.     var mask = additionalValues.SingleOrDefault(x=>x.Key=="mask").Value;
  6.     var id = additionalValues.SingleOrDefault(x => x.Key == "id").Value;
  7. }
  8. @{ var maskedInput = ViewData.GetModelAttribute<MaskAttribute>();
  9.    if (maskedInput != null)
  10.    {
  11.         <div class="editor-label">
  12.             @Html.LabelForModel()
  13.         </div>
  14.         <div class="editor-field">
  15.             @Html.TextBoxFor(m => m, new { id = @id })
  16.         </div>
  17.    }
  18. }
  19. <script type="text/javascript">
  20.     $(document).ready(function () {
  21.         $("#@id").mask('@mask');
  22.     });
  23. </script>

1 comment:

Unknown said...

Can you upload build solution for me?