ASP.NET MVC 3中的jQuery Ajax表单

12

这可能是一个简单的问题,但对我来说现在并不清楚,我必须把事情理清楚...也许有人可以帮助我 =)...

我知道MVC带有Ajax Helpers。 我知道有微软库,也有jquery。 我知道在MVC 3中引入了非侵入式JavaScript,为html添加了一些特殊标签以保持代码整洁...

但它们是如何共同使用的呢?

例子:我想通过ajax发送远程表单(局部视图)来添加博客文章的评论,而无需将整个页面提交回服务器。

在我的Partial View中,我应该使用Ajax.BeginForm(),这是MvcAjax还是Jquery? 或者我是否应该使用Html.BeginForm(),并在表单的点击事件上注册像$.post这样的东西。如果禁用或不支持JavaScript,则也会有纯html的后备方案....

或者一般地说,在发表博客文章的评论时使用什么方式?... 我认为这是正确的,我正在将其发布到commentscontroller的create操作中,并且我将使用JsonModelBinder将其转换为模型。之后,我将返回Json并将其附加到我的评论列表中...

这个做法合理吗?

1个回答

30
默认情况下,Ajax.BeginForm()使用的是jquery。您需要引用jquery.unobtrusive-ajax.js脚本才能使其正常工作。 另一种选择是使用Html.BeginForm(),并在表单的单击事件上注册$.post。个人而言,这是我所做的。 JsonModelBinder已经在ASP.NET MVC 3中引入,它允许您将JSON字符串发送到一个控制器操作,该操作将被映射回视图模型。例如,如果您有以下视图模型:我假设我正在将数据发布到commentscontroller的create操作,并使用JsonModelBinder将其转换为模型。之后,我将返回Json并将其附加到我的评论列表...
public class PersonViewModel
{
    public string Name { get; set; }
    public int Age { get; set; }
}

并执行以下操作:

public ActionResult Foo(PersonViewModel person) 
{
    ...    
}

在AJAX中调用它的传统方式是:

$.ajax({
    url: '@Url.Action("foo")',
    type: 'POST',
    data: { name: 'john', age: 20 },
    success: function(result) {
        // TODO:
    }
});

在ASP.NET MVC 3中,您可以发送JSON作为请求参数,该参数将绑定到PersonViewModel操作参数:

$.ajax({
    url: '@Url.Action("foo")',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ name: 'john', age: 20 }),
    success: function(result) {
        // TODO:
    }
});

请注意,如果您正在使用通过捕获提交事件(例如$("#some_form").submit(function () { var data = $(this).serialize(); ... $.ajax({... )从表单中获取的数据来向MVC发布内容,则应该删除Darin示例中的内容类型,以使其在此情况下正常工作。 - Jon Kragh
有趣!我会看一下JsonModelBinder。 - Rushino
我必须说,非常好的答案。它为我节省了2-3个小时。谢谢@Darin Dimitrov。 - Scorpion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接