我正在使用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 = "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" / >
}
我试图使用javascript函数发布此内容,以避免页面刷新。我有以下功能
function newSchool(btnClicked) {
var $form = $(btnClicked).parents('form');
var data = $form.serialize();
console.log(JSON.stringify(data));
$.ajax({
url: '@Url.Action("AddSchool", "SetupSchools")',
type: 'POST',
contentType: "json",
data: {
newSchool: JSON.stringify(data)
},
success: function() {
DevExpress.ui.notify('School Added', 'success', 1500);
},
failure: function(xhr, textStatus, errorThrown) {
DevExpress.ui.notify('Error - ' + XMLHttpRequest.responseText, 'error', 1500);
},
});
}
我可以在控制台中看到数据存在并且看起来正确,但是我的控制器中的数据始终为空。我的控制器如下所示
public void AddSchool(Models.School school)
{
}
如何正确发送数据?或者,是否有更好的方式发布数据而不刷新表单。
答案 0 :(得分:1)
正如某些评论建议的那样,您需要删除contentType: json
并使用data: $("form").serialize()
,我的个人建议是使用cache: false
始终将数据发送到控制器,如果我没弄错,IE用于缓存ajax请求,如果它看起来一样。
这是一个&#34;小提琴&#34;你可以看到它正在使用当前的代码:
https://dotnetfiddle.net/IGaQnt
你的代码应该是这样的:
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
Model:
statements+=(MessageDefinition | MessageUsage)*;
MessageDefinition:
'[MESSAGE_DEF]' name=ID;
MessageUsage:
'[MESSAGE_USAGE]' usage=[MessageDefinition];
[MESSAGE_DEF] EXAMPLE_1
[MESSAGE_DEF] EXAMPLE_2
[MESSAGE_USAGE] EXAMPLE_1
,但我不知道您完整的代码,因此请根据需要进行更改。
答案 1 :(得分:0)
我假设学校在表单上有元素作为属性,所以如果这是正确的,你需要做的是使用$ form.serializeArray()以json格式获取数据并在异步上发送该变量请求。 我认为错误是因为您创建了一个对象newschool并将所有数据分配给该对象,但您在控制器中期望的是数据而不是该对象。