2011-03-29 9 views
9

¿Cómo puedo agregar el control agregado dinámicamente a la validación?Validar el control agregado dinámicamente

<div class="editor-field"> 
    @*@Html.EditorFor(model => model.Middlename)*@ 
    <div id="x"></div> 

    <script type="text/javascript"> 

     $(function() { 

      var newTextBoxDiv = $(document.createElement()); 

      newTextBoxDiv.html('<input type="text" name="Middlename" id="Middlename" width="100" data-val="true" data-val-required="The Middleneim field is required." />'); 

      newTextBoxDiv.appendTo('#x'); 
     }); 

    </script> 

    @Html.ValidationMessageFor(model => model.Middlename) 
</div> 

he notado que cuando yo no uso la función de lista, es decir,

<script type="text/javascript"> 


var newTextBoxDiv = $(document.createElement()); 

newTextBoxDiv.html('<input type="text" name="Middlename" id="Middlename" width="100" data-val="true" data-val-required="The Middleneim field is required." />'); 

newTextBoxDiv.appendTo('#x'); 
</script> 

, las validaciones del lado del cliente patadas de entrada. ¿Hay alguna forma de incluir explícitamente las entradas creadas de manera diferida a las validaciones?

+0

le gustaría que se mostrará información sobre el error en la parte superior de la página? si es así, puede obtener el valor MiddleName y validarlo. si no es una entrada válida, agregue ModelState.AddModelError ("", ""); – AEMLoviji

+0

no hay ningún error en la parte superior de la página, estoy usando ASP.NET MVC 3. el valor predeterminado es la validación del lado del cliente. Me pregunto cuándo no estoy usando la función de jQuery's ready, todo es normal, es decir, la entrada añadida dinámicamente no es diferente de la entrada agregada en tiempo de diseño, también se valida (se agrega dinámicamente) (mientras el usuario está escribiendo) si es requerido o no –

Respuesta

0

Es técnicamente posible agregar a la validación MVC del lado del cliente presionando los valores en la matriz de validadores "window.mvcClientValidationMetadata". Hay un artículo bastante bueno, here, que muestra algunas de las secuencias de comandos y técnicas involucradas. Esto no lo ayudará con la validación del lado del servidor, pero como el cliente no obtendrá esta entrada sin javascript, usted ha mitigado esto.

Normalmente aplicaría un patrón de mejora progresiva más estándar a esto. Cree la entrada del segundo nombre de forma predeterminada e implemente validadores MVC estándar. Luego use jQuery para ocultarlo a menos que (o hasta) sea necesario. Por supuesto, esto puede no encajar con sus requisitos, pero si lo hace, entonces diría que es una mejor metodología.

1

ACTUALIZACIÓN: Esta respuesta es si utiliza la validación de jquery no intrusiva, no escribió lo que utiliza.

En primer lugar, añadir este plugin para jQuery listo: http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/

cuenta que debe agregar su elemento interior de etiqueta de formulario. Digamos que tienes un envoltorio alrededor de tu etiqueta, lo llamaré "elemento".

Después de anexar el elemento de DOM, llamar a esto:

$.validator.unobtrusive.parseDynamicContent($(element).find("form").selector); 
var form = $(element).find("form"); 
$(form).valid(); 
    $(form).find("input").each(function() { 
     $(this).blur(function() { 
      $(this).valid(); 
     }); 
    }); 
    $(form).find("select").each(function() { 
     $(this).change(function() { 
      $(this).valid(); 
     }); 
Cuestiones relacionadas