asp.net mvc ajax表单助手/发布附加数据

时间:2010-03-31 06:53:16

标签: jquery asp.net-mvc html-helper

我想使用ajax帮助器来创建ajax请求,使用post发送附加的动态数据(例如,使用class = blogCommentDateTime获取最后一个元素,并将最后一个元素的值发送给控制器,该控制器将返回只有博客评论后)。

我已经在jQuery Form插件的帮助下成功完成了这样做:

 $(document).ready(function () {
        $("#addCommentForm").submit(function () {

            var lastCommentDate = $(".CommentDateHidden:last").val();
            var lastCommentData = { lastCommentDateTicks: lastCommentDate };
            var formSubmitParams = { data: lastCommentData, success: AddCommentResponseHandler }

            $("#addCommentForm").ajaxSubmit(formSubmitParams);
            return false;
        });

此表单是使用html.beginform()方法创建的。

我想知道使用ajax.beginform()帮助器是否有一种简单的方法可以做到这一点?

当我尝试使用相同的代码但用ajax.beginform()替换html.beginform()时,当我尝试提交表单时,我发布了2个帖子(这是可以理解的,其中一个是由帮助,另一个由我上面的JS。我不能创建2个请求,所以这个选项出来了)

我尝试删除返回false并将ajaxSubmit()更改为ajaxForm(),以便它只“准备”表单,这只导致一个帖子,但它不包括我定义的额外参数,所以这也毫无价值。

然后我尝试保留ajaxForm(),但是每当单击表单上的提交按钮而不是表单被提交时调用(我猜这几乎是相同的事情),这也会产生2个帖子。

我问这个问题的最大原因是我已经遇到了上面的javascript的一些问题,并使用了mvc框架提供的mvc验证(我将设置另一个问题),并且想知道这个我可以进一步深入了解我的验证问题。

1 个答案:

答案 0 :(得分:1)

    function beginPost() {
        $("form").ajaxSubmit({ data: { id: "idnum", random: "randomness"} });
        return false;         
    }


using (Ajax.BeginForm(new AjaxOptions{ UpdateTargetId = "TargetDiv", OnBegin = "beginPost" })

到目前为止,这是我能想到的最佳方式。这是一个黑客,因为它覆盖了ajax助手为你做的初始接线和上面的例子(它正确地返回我的部分视图,但是我的ajax助手中给出的updatetargetid没有被保留,所以它基本上抛弃了响应,我可以在.ajaxSubmit调用中将此设置修复此设置,但是这否定了使用ajax帮助器的优点)我想我会坚持使用jQuery帮助器的jQuery表单插件来写出我的表单。在上面的例子中,我通过调用.ajaxSubmit手动提交它,然后返回false,这样页面就不会继续并发布,因为ajax助手已将其连接到这样做。我的另一种方法,我认为是一个巨大的黑客(我甚至没有尝试)是尝试在表单中动态插入隐藏字段,名称属性设置为我希望我的其他数据传递到控制器并在beginPost方法中完成所有操作。

我会坚持使用普通表单并使用jquery表单插件进行连接。