MVC 3 Razor - Ajax.BeginForm OnSuccess

时间:2011-02-07 22:37:31

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

我是MVC的新手,我在提交表单后尝试更新我的页面;但它不起作用。我只是试图隐藏表单,并显示div OnSuccess的内容。

我的代码是:

<script type="text/javascript">
    $(document).ready(function () {
        $('#confirmation').hide();
    });

    function MessageConfirmation() {
        $('#confirmation').show('slow');
        $('#contactForm').hide('slow');
    }

</script>

@using (Ajax.BeginForm("Index", new AjaxOptions { OnSuccess = "MessageConfirmation" }))
{
<fieldset id="contactForm">
    <legend>Message</legend>
    <p>
        @Html.Label("Email", "Email"): @Html.TextBox("Email")
    </p>
    <p>
        @Html.Label("Subject", "Subject"): @Html.TextBox("Subject")
    </p>
    <p>
        @Html.Label("Message", "Message"): @Html.TextArea("Message")
    </p>
    <p>
        <input type="submit" value="Send" />
    </p>
</fieldset>

<p id="confirmation" onclick="MessageConfirmation()">
    Thanks!!!
</p>
}

欢迎任何其他解决方案/想法。

提前致谢!

4 个答案:

答案 0 :(得分:7)

不工作是一个问题描述,更适合那些不了解/关心计算机如何工作而不是软件开发人员的人。软件开发人员通常会准确描述他们遇到的问题。他们发布了他们所拥有的确切错误消息/异常堆栈跟踪。

这就是说你要求替代解决方案,这是我的:不要使用任何MS Ajax.* helpers,直接和不引人注意地使用jquery,就像这样

<script type="text/javascript">
    $(function () {
        $('#confirmation').hide();
        $('form').submit(function() {
            $('#confirmation').show('slow');
            $(this).hide('slow');
            return false;
        });
    });
</script>

@using (Html.BeginForm())
{
    <fieldset id="contactForm">
        <legend>Message</legend>
        <p>
            @Html.Label("Email", "Email"): 
            @Html.TextBox("Email")
        </p>
        <p>
            @Html.Label("Subject", "Subject"): 
            @Html.TextBox("Subject")
        </p>
        <p>
            @Html.Label("Message", "Message"): 
            @Html.TextArea("Message")
        </p>
        <p>
            <input type="submit" value="Send" />
        </p>
    </fieldset>
}

<p id="confirmation">
    Thanks!!!
</p>

注意confirmation段落是如何从表单中外部化的。

答案 1 :(得分:3)

您确定项目中引用了所有正确的js文件吗? 在MVC3中,他们已经离开了MS Ajax文件。如果我没记错的话 - 默认情况下应该启用不显眼的javascript,所以你应该引用以下文件:jquery.js,jquery.validate.js,jquery.valudate.unobtrusive.js,jquery.unobtrusive-ajax.js

使用这些文件引用 - 你应该没问题。

P.S。 Brad Wilson有一篇非常好的博客文章,解释了MVC3中不显眼的ajax的细节,以及它是如何工作的。 请在此处查看:http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-ajax.html

答案 2 :(得分:0)

确保您可以使用您的操作方法。还要添加一个失败处理程序,看看它是否也返回了失败。

必须启用不显眼的功能,并且必须为MVC 3和razor添加MVC不引人注目的AJAX脚本。

HTH。

答案 3 :(得分:0)

您可以使用JQuery触发器

$("#confirmation").trigger('click');

因为你在div上有一个onclick方法