使用jquery post将表单值传递给控制器为null
在Asp.NETMVC项目中,我的cshtml页面中有一个表单。我想用jquery post适配器将表单值发送到控制器。我正在使用.serilize()函数来获取表单值,当我警告序列化的值时,我可以将它们作为字符串获取,但是,当我将其发送到控制器时,它将以null形式发布。这是我的cshtml页面: EditPage.cshtml使用jquery post将表单值传递给控制器为null,jquery,asp.net-mvc,post,Jquery,Asp.net Mvc,Post,在Asp.NETMVC项目中,我的cshtml页面中有一个表单。我想用jquery post适配器将表单值发送到控制器。我正在使用.serilize()函数来获取表单值,当我警告序列化的值时,我可以将它们作为字符串获取,但是,当我将其发送到控制器时,它将以null形式发布。这是我的cshtml页面: EditPage.cshtml @model Models.PROJECTS @using (Html.BeginForm(null,null,FormMethod.Post,new {id="E
@model Models.PROJECTS
@using (Html.BeginForm(null,null,FormMethod.Post,new {id="EditForm"}))
{
@*Html.AntiForgeryToken()*@
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.PROJE_NO)
<div class="form-group">
@Html.LabelFor(model => model.PROJECTNAME, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.PROJECTNAME, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.PROJECTNAME, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.PROJECTCODE, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.PROJECTCODE, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.PROJECTCODE, "", new { @class = "text-danger" })
</div>
</div>
.
.
.
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<i class="fa fa-save fa-lg" id="saveBtn" style="cursor:pointer;color:green" title="Edit Project"></i>
</div>
</div>
</div>
}
@section scripts
{
<script language="javascript">
$(document).ready(function() {
$(document).on("click", "#saveBtn", function () {
var formData = $('#EditForm').serialize();
alert(JSON.stringify(formData));
$.post('@Url.Action("EditProject", "Home")',
{
project: JSON.stringify(formData)
}).done(function(data) {
if (data.success) {
alertify.success(data.message);
} else {
alertify.error(data.message);
}
}).fail(function() {
alertify.error('Error while editing project');
});
});
});
</script>
对于EditProject操作,参数project为null。我不知道我哪里做错了。
非常感谢您的帮助。在评论之后,要解决此问题,您可以使用两个更新: 1-您不需要使用
JSON.stringify(formData)
,因为当您使用.serialize()
时,它会像查询字符串一样生成数据,因此需要使用默认的contentType
:应用程序/x-www-form-urlencoded;charset=UTF-8
,而不是JSON
2-通过替换以下内容,对js
功能进行少量更改:
{
project: JSON.stringify(formData)
}
通过formData
js将是:
$(document).ready(function () {
$(document).on("click", "#saveBtn", function () {
var formData = $('#EditForm').serialize();
$.post('@Url.Action("EditProject", "Home")', formData)
.done(function (data) {
if (data.success) {
alertify.success(data.message);
} else {
alertify.error(data.message);
}
}).fail(function () {
//alertify.error('Error while editing project');
});
});
});
这不是因为
proje
在proje:JSON.stringify(formData)
中,我认为应该是project:JSON.stringify(formData)
@Sajid非常感谢您的帮助。这在项目中实际上是相同的。对不起,我打错了。当我在这里写它时,我错误地把它写为“proje”,不客气,所以更新后它总是空的?它被发布到动作中为空。我将表单的操作定义为null,但它实际上似乎要执行另一个操作。我还尝试使用.preventDefault();方法它也不起作用。您能否将alert(JSON.stringify(formData))的结果添加到问题中代码>和项目
类,我想试试这个。谢谢,@Sajid它成功了。使用$.ajax({})方法也有效。
$(document).ready(function () {
$(document).on("click", "#saveBtn", function () {
var formData = $('#EditForm').serialize();
$.post('@Url.Action("EditProject", "Home")', formData)
.done(function (data) {
if (data.success) {
alertify.success(data.message);
} else {
alertify.error(data.message);
}
}).fail(function () {
//alertify.error('Error while editing project');
});
});
});