我有一个完全在FireFox上运行的ASP.NET MVC ajax表单。这是代码的样子:
<% using (Ajax.BeginForm("SendMessage", "Contact", new AjaxOptions { OnComplete = "ProcessResult" })) { %>
<div id="inputArea">
<label for="Name" class="contactLabel">Your Name:</label>
<%= Html.TextBox("SenderName", Model.Contact.SenderName)%>
<label for="Email" class="contactLabel">Your Email:</label>
<%= Html.TextBox("Email", Model.Contact.Email)%>
<label for="Subject" class="contactLabel">Subject:</label>
<%= Html.TextBox("Subject", Model.Contact.Subject)%>
<label for="Message" class="contactLabel">Message:</label>
<%= Html.TextArea("Message", Model.Contact.Message)%>
</div>
<input type="submit" value="Send" id="submitButton" onclick="allowSubmit(false);" />
<span id="operationMessage"></span>
还有两个额外的javascripts,一个用于禁用提交按钮(让用户只按一次),另一个用于处理服务器结果:
function ProcessResult(content) {
var json = content.get_response().get_object();
var result = eval(json);
$("#operationMessage > span").empty();
$("#operationMessage > ul").empty();
$(':input').removeClass('input-validation-error');
if (result.Successfull) {
$('#operationMessage').append('<span><br>' + result.Message + '</span>')
.removeClass('error')
.addClass('success');
}
else {
$('#operationMessage').append('<span><br>' + result.Message + '')
.removeClass('success')
.addClass('error');
for (var err in result.Errors) {
var propertyName = result.Errors[err].PropertyName;
var errorMessage = result.Errors[err].Error;
var message = propertyName + ' ' + errorMessage;
$('#' + propertyName).addClass('input-validation-error');
$('#operationMessage > ul').append('<li># ' + message + '</li>');
}
}
allowSubmit(true);
}
function allowSubmit(enabled) {
if (!enabled) {
$('#submitButton').attr('disabled', 'disabled');
}
else {
$('#submitButton').removeAttr('disabled');
}
}
我把它全部用在了FireFox上,但是当我在IE上测试它时,它没有用。当我按下IE上的发送按钮时,它被禁用(正确)但没有服务器调用,这意味着MVC控制器上的服务器功能从未被调用过。
非常感谢任何帮助。
答案 0 :(得分:1)
好的......发现问题是什么,但为什么IE和FF之间的行为不同...... 如果你在ONCLICK事件上禁用SUBMIT按钮,整个服务器调用将不会发生在IE上(而它在FF上)。所以,只需删除页面上的onclick事件处理程序,就可以了。