我尝试将一个对象从表单发送到一个HttpPost方法(谁收到一个对象参数),但我总是得到一个NullExceptionReferece,但如果我作为字符串传递,我不会得到错误。 我的控制器:
[HttpPost]
//public ActionResult CheckVat(string vatnumber) {
public ActionResult CheckVat(VatSearch vatnumber)
{
return Json(vatnumber);
}
我的ajax功能:
<h3>Insert VAT number to check:</h3>
@model LatourretrVat.Models.VatSearch
<form id="form">
<div class="row">
<div class="col-sm-6">
<div class="form-group">
@Html.TextBoxFor(m => m.VatNumber,new { @class = "form-control", @id="VatNumber"})
@Html.ValidationMessageFor(model => model.VatNumber, "", new { @class = "text-danger" })
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Check VAT" />
</div>
</div>
</div>
</form>
<script >
$(document).ready(function () {
$('#form').submit(function () {
var VatSearch = new Object();
VatSearch.VatNumber = $("#VatNumber").val();
$.ajax({
url: '@Url.Action("CheckVat", "Home")',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
//data: JSON.stringify({
// VatNumber: $('#VatNumber').val(),
//}),
data: JSON.stringify(VatSearch),
success: function (result) {
alert("success");
},
error: function (result) {
console.log(result);
alert("error");
}
});
return false;
});
});
</script>
答案 0 :(得分:1)
您的HttpPost操作方法参数的名称不应与参数类型的其中一个属性相同。
目前您的用户vatnumber
作为参数类型,我假设您的视图模型还有一个名为VatNumber
的属性。
这应该有用。
[HttpPost]
public ActionResult CheckVat(VatSearch data)
{
return Json(data);
}
此外,由于您明确从服务器发送json响应,因此无需将dataType
指定为"json"
。
答案 1 :(得分:0)
如果要在控制器中接收和对象,可以发送如下的JSON对象:
$('#form').submit(function () {
var VatSearch = { "VatNumber" : $("#VatNumber").val() };
$.ajax({
url: '@Url.Action("CheckVat", "Home")',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(VatSearch),
success: function (result) {
alert("success");
},
error: function (result) {
console.log(result);
alert("error");
}
});
return false;
});