【发布时间】:2013-11-11 11:10:31
【问题描述】:
我有以下客户端验证功能:
<script type="text/javascript">
$(function () {
document.onkeydown = function () {
if (event.keyCode == 116) {
event.keyCode = 0;
event.returnValue = false;
}
}
$("#btnEnviar").click(function () {
$("#cerrarPopup").click(addHandlerCloseModal);
var msg = "";
if ($("#txtNombre").val() == "") { msg += "El nombre es un campo obligatorio <br/>"; };
if ($("#txtTelefono").val() == "" ||
!$.isNumeric($("#txtTelefono").val()) ||
$("#txtTelefono").val().length != 9) {
msg += "Introduzca un teléfono válido de 9 posiciones. <br/>";
};
if (msg != "") {
doModal(msg);
return false;
}
if (!$('#chkClausulas').prop("checked")) {
msg = "No ha aceptado las condiciones legales";
doModal(msg);
return false;
}
//$("#span1").html('');
return true;
});
});
function doModal(obj) {
$("#spanMsg").each(function () {
$(this).html(obj);
});
$("#divModal").modal();
}
function clearForm() {
$("#rightContent input:text").val('');
$('#chkClausulas').attr("checked", false);
}
function addHandlerCloseModal() {
$.modal.close();
}
</script>
然后,在服务器端验证中,我处理请求并显示确认请求已成功的模式消息。
Dim msgScript As String = "<script type='text/javascript'>" & _
"$('#span1').html('');clearForm();doModal('#msg#'); " & _
"$('#cerrarPopup').click(function () { $.modal.close(); }); " &
"</script>"
ScriptManager.RegisterStartupScript(Me, Me.GetType, "doModal", _
msgScript.Replace("#msg#", outMsg), False)
这是按预期工作的。客户端获取已处理消息和 clearForm(); 函数清除所有输入:文本控件。
问题是当您在 browsert 或 F5 或 CTRL + F5 上按刷新按钮时 尽管表单已被清除,但仍使用先前的值再次提交表单。
我用过这个:
document.onkeydown = function () {
if (event.keyCode == 116) {
event.keyCode = 0;
event.returnValue = false;
}
}
为了避免按 F5 键但它不是一直工作。
如何避免重新提交表单。为什么浏览器缓存文本输入值 尽管正在清除控件?
【问题讨论】:
-
这是 asp.net 表单网站上的常见行为,因为每次交互都是服务器 POST。当您刷新浏览器时,会尝试刷新最后一个操作,遗憾的是这是一个 POST。