我似乎无法将我的表单值发回服务器

时间:2012-03-03 15:27:12

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

我正在玩MVC3并试图创建一个简单的联系表单,使用jquery $ .ajax将值发布回服务器。

目前我的联系表格视图绑定到我创建的ContactViewModel:

public class ContactViewModel
{
    [Required]
    public string Name { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [Required]
    public string Message { get; set; }     
}

这是我的[HttpPost]方法,用于在提交后处理已发布的表单:

    [HttpPost]
    public ActionResult SubmitForm(ContactViewModel contactVM)
    {
        if (!ModelState.IsValid)
        {
            return View(contactVM);
        }

        // TODO: If the form's valid then save the data

        return RedirectToAction("Thankyou");
    }

如您所见,此方法需要ContactViewModel数据类型。我很困惑,因为我似乎没有在我的javascript中提供这个类,所以我想我必须在js中重建类然后将它发回到我的SubmitForm方法?以下是我用来尝试实现此目的的代码:

<script type="text/javascript">
    $(document).ready(function () {
        var contactVM = { ContactViewModel : [{
            Name: $('#Name').val(),
            Email: $('#Email').val(),
            Message: $('#Message').val() }]
        };

        $.ajax({
            url: '/Contact/SubmitForm',
            type: "POST",
            data: JSON.stringify(contactVM),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function () {
                alert('Success!');
            },
            error: function () {
                alert('Failure!');
            }
        });
    });        
</script>

正如你所看到的,我试图在javascript中创建完全相同的类,以便我可以将它发布回服务器但是当我单步执行代码时,似乎我在SubmitForm方法中接受了contactVM变量只有空值。

我哪里错了?我甚至在这里正确的轨道?如果我没有解释清楚,请道歉!

谢谢!

更新:原来我是一个白痴,只调用$ .ajax函数页面加载而不是单击按钮时!结合安德鲁在下面所说的,似乎都在起作用: - )

1 个答案:

答案 0 :(得分:1)

在这种情况下,JavaScript中不需要“包装器”ContactViewModel。你应该能够简单地写:

$(document).ready(function () {
    var contactVM = {
        Name: $('#Name').val(),
        Email: $('#Email').val(),
        Message: $('#Message').val()
    };

    $.ajax({
        url: '/Contact/SubmitForm',
        type: "POST",
        data: JSON.stringify(contactVM),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function () {
            alert('Success!');
        },
        error: function () {
            alert('Failure!');
        }
    });
});     

模型活页夹将获取您提交的对象并将其映射到ContactViewModel