MVC表单Javascript Post在控制器内为空
我正在使用MVC,在我看来有一个表单如下MVC表单Javascript Post在控制器内为空,javascript,asp.net-mvc,Javascript,Asp.net Mvc,我正在使用MVC,在我看来有一个表单如下 @using(Html.BeginForm(null, null, FormMethod.Post)) { @Html.HiddenFor(m => m.Id) @Html.HiddenFor(m => m.SysCreated) @Html.HiddenFor(m => m.SysDeleted) @Html.TextBoxFor(m => m.Name, new { @class = "for
@using(Html.BeginForm(null, null, FormMethod.Post)) {
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.SysCreated)
@Html.HiddenFor(m => m.SysDeleted)
@Html.TextBoxFor(m => m.Name, new { @class = "form-control" })
<input typeof="button" value="Create New" onclick="newSchool(this)" class="btn btn-sm btn-primary btn-block btn-signin" style = "margin-bottom:20px" / >
}
我可以在控制台中看到数据在那里并且看起来是正确的,但是我的控制器中的数据总是空的。我的控制器如下所示
public void AddSchool(Models.School school)
{
}
如何正确发送数据?或者,是否有更好的方法在不刷新表单的情况下发布数据。我假设school将表单上的元素作为属性,因此如果这是正确的,那么您必须使用$form.serializeArray()以json格式获取数据,并在异步请求时发送该变量。
我认为错误是因为您创建了一个对象newschool并将所有数据分配给该对象,但您在控制器中期望的是数据而不是该对象。正如一些评论所建议的,您需要删除
contentType:json
并使用数据:$(“form”).serialize()
,我个人的建议是使用cache:false
始终将数据发送到控制器(如果我没有弄错的话),即如果ajax请求看起来相同,则用于缓存该请求
这里有一个“提琴”,你可以看到它与你当前的代码一起工作:
您的代码应该是这样的:
function newSchool(btnClicked) {
var $form = $(btnClicked).parents('form');
var data = $form.serialize();
console.log(JSON.stringify(data));
$.ajax({
url: '@Url.Action("AddSchool", "Home")',
type: 'POST',
cache: false,
data: data,
success: function(result) {
alert(result); //I return the name the user submited, you can do whatever you want here.
},
failure: function(xhr, textStatus, errorThrown) {
DevExpress.ui.notify('Error - ' + XMLHttpRequest.responseText, 'error', 1500);
},
});
}
我决定在小提琴中使用
JsonResult
而不是void
,我不知道您是否完成了代码,所以请根据需要进行更改。请注意,该标记用于有关图案的问题。对于有关ASP.NET实现的问题,请使用标记。您可以使用Ajax.BeginForm helper,而不将其字符串化,直接发布它,如:data:data,
发布后是否也尝试刷新页面?删除contentType:“json”,
并使用数据:$('form')。serialize(),
function newSchool(btnClicked) {
var $form = $(btnClicked).parents('form');
var data = $form.serialize();
console.log(JSON.stringify(data));
$.ajax({
url: '@Url.Action("AddSchool", "Home")',
type: 'POST',
cache: false,
data: data,
success: function(result) {
alert(result); //I return the name the user submited, you can do whatever you want here.
},
failure: function(xhr, textStatus, errorThrown) {
DevExpress.ui.notify('Error - ' + XMLHttpRequest.responseText, 'error', 1500);
},
});
}