2011-03-19 18 views
53

OK, he intentado cosas durante horas y podría necesitar ayuda. Estoy tratando de implementar una página en MVC 3 que tenga botones "atrás" y "próximo". Cuando se hace clic en el botón Atrás, quiero desactivar la validación MVC del lado del cliente para que mi método de acción se ejecute y envíe al usuario a la página web lógica anterior. He intentado esto:Desactivar la validación del lado del cliente en MVC 3 "cancelar" botón de enviar

<script type="text/javascript"> 
    document.getElementById("backButton").disableValidation = true; 
</script> 

y esto:

<input type="submit" name="backButton" value="← Back" 
title="Go back to step 1." disableValidation="true" /> 

Pero no importa qué, la validación del lado del cilent JavaScript entra en acción y no dejar que el botón haga su post-espalda. Estoy pensando que disableValidation solo funciona en MVC 2 quizás, y se supone que estoy haciendo otra cosa en MVC 3, pero parece que no puedo encontrar ningún ejemplo.

Respuesta

117

¿Cuál es esta fuerza mística que hace que la respuesta se revele tan pronto como publiques una pregunta en alguna parte?

Parece que en MVC 3 desactiva la validación del lado del cliente en un botón agregando la clase "cancelar". Entonces en mi ejemplo:

<input type="submit" name="backButton" value="← Back" 
title="Go back to step 1." class="cancel" /> 

funciona muy bien. Y tampoco se necesita ningún atributo de ID. Si usted tiene una clase de estilo actual en el botón, simplemente hacer esto:

<input type="submit" name="backButton" value="← Back" 
title="Go back to step 1." class="style-name cancel" /> 
+3

Sospecho que la "fuerza mystcal" está ayudando a ayudar a los demás. :) Estaba teniendo un problema similar y tu solución apareció rápidamente. Gracias. +1 – REMESQ

+5

Lo he escuchado explicado muchas veces, pero me gusta "esquivar el caucho" lo mejor. Se trata de cómo entiendes mucho mejor un problema cuando tú mismo lo explicas a los demás. Usted lo explica con más detalles de lo que alguna vez pensó, así que lo lleva a una mejor comprensión del problema. Una buena cosa es pensar en ello, o hablarlo, como si se lo estuvieras explicando a alguien a quien deseas ayudar. Puede encontrar la respuesta. El "pato de goma" viene de alguien que puso un pato de goma en su monitor. Luego le decía al pato de goma su problema y a veces lo resolvía. – vbullinger

+9

Wtf. Pensé que el objetivo de MVC era la separación de las preocupaciones. En cuyo caso, ¿cómo demonios * NO * viola la separación de las preocupaciones? ¿Usar CSS para afectar realmente la funcionalidad de la vista? Me encanta que funcione, pero me siento sucio por usarlo. – KSwift87

1

Los scripts de validación parecen estar vinculados a la presente input tipo. Cambiando cancel a un botón, la validación se salta:

<button type="button" onclick="document.location.href('Index')">Cancel</button> 
+0

No en MVC 4. Todavía se comporta (al menos para mí) de la misma manera que un botón como entrada. – eaglei22

-1

lo uso para el botón

$("button").each(function (elem) { 
    var button = $($("button")[elem]); 
    button.addClass('cancel'); 

    if (button.attr('type') == 'submit') { 

     button.click(function (e) { 
      var validator = button.closest('form').validate(); 
      validator.cancelSubmit = true; 
     }); 
    } 
}); 
Cuestiones relacionadas