我正在玩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函数页面加载而不是单击按钮时!结合安德鲁在下面所说的,似乎都在起作用: - )
答案 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
。