MVC Ajax表单不在IE上提交

时间:2009-08-13 06:49:58

标签: asp.net-mvc asp.net-ajax jquery

我有一个完全在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控制器上的服务器功能从未被调用过。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

好的......发现问题是什么,但为什么IE和FF之间的行为不同...... 如果你在ONCLICK事件上禁用SUBMIT按钮,整个服务器调用将不会发生在IE上(而它在FF上)。所以,只需删除页面上的onclick事件处理程序,就可以了。