2011-08-05 21 views
6

La salida estándar de @Html.HiddenFor(model => model.Id) es¿Por qué la Html.HiddenFor generar los datos de atributos-Val-

<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="0" /> 

¿Hay una necesidad de la generación de los atributos data-val-*? Parecen bastante detallados y no necesarios solo para poder almacenar y devolver datos para el próximo POST.

¿Es una buena idea para desactivar estos atributos? ¿Son útiles para algunos escenarios?

ps: Actualmente tengo una manera de desactivar temporalmente estableciendo ViewContext.UnobtrusiveJavaScriptEnabled = false

el uso de estas dos clases:

public static class Extensions 
{ 
    public static NoUnobtrusiveJavaScript NoUnobtrusiveJavaScript(this HtmlHelper htmlHelper) 
    { 
     return new NoUnobtrusiveJavaScript(htmlHelper.ViewContext); 
    } 
} 

public class NoUnobtrusiveJavaScript: IDisposable 
{ 

    private bool _disposed; 
    private readonly bool _unobtrusiveJavaScript; 
    private readonly ViewContext _viewContext; 

    public NoUnobtrusiveJavaScript(ViewContext viewContext) 
    { 
     if (viewContext == null) { 
      throw new ArgumentNullException("viewContext"); 
     } 

     _viewContext = viewContext; 
     _unobtrusiveJavaScript = viewContext.UnobtrusiveJavaScriptEnabled; 
     _viewContext.UnobtrusiveJavaScriptEnabled = false; 
    } 

    public void Dispose() 
    { 
     Dispose(true /* disposing */); 
     GC.SuppressFinalize(this); 
    } 

    protected virtual void Dispose(bool disposing) 
    { 
     if (!_disposed) 
     { 
      _disposed = true; 
      // restore the original UnobtrusiveJavaScriptEnabled state 
      if (_viewContext != null) 
      { 
       _viewContext.UnobtrusiveJavaScriptEnabled = _unobtrusiveJavaScript; 
      } 
     } 
    } 

    public void EndForm() 
    { 
     Dispose(true); 
    } 
} 

* patrón que sigue al código de Html.BeginForm FormExtensions.cs y MvcForm.cs

+0

Si desea desactivar la validación, eche un vistazo a esta respuesta: http://stackoverflow.com/questions/4700172/unrequired-property-keeps-getting-data-val-required-attribute/4845768#4845768 – frennky

Respuesta

1

Solo porque el campo esté oculto, no necesariamente significa que no desea la validación. Es posible que esté manipulando el campo oculto a través de javascript y desee mantener la validación integrada para que no tenga que hacer la suya propia.

Cuestiones relacionadas