Javascript ASP.NET MVC-jQuery POST方法为空
我正在调用一个Javascript ASP.NET MVC-jQuery POST方法为空,javascript,jquery,ajax,asp.net-mvc,twitter-bootstrap,Javascript,Jquery,Ajax,Asp.net Mvc,Twitter Bootstrap,我正在调用一个PartialView并将它从另一个PartialView注入到一个中,使用Boostrap model使其成为弹出模式。 到目前为止,我的Boostrap模式显示的和预期的一样,但没有表现出预期的效果。以下是我在Boostrap模式中的目标 做一个助推模式-正常 在Boostrap模式上添加验证-正常 发送要保存在数据库中的my modal值-不正常 这是,我在其中插入部分视图,并使其成为模式视图 <div class="modal fade" id="myModal" t
PartialView
并将它从另一个PartialView
注入到一个
中,使用Boostrap model
使其成为弹出模式。
到目前为止,我的Boostrap模式显示的和预期的一样,但没有表现出预期的效果。以下是我在Boostrap模式中的目标
,我在其中插入部分视图
,并使其成为模式视图
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Create Sample</h4>
</div>
<div class="modal-body">
<div id="modalBodyContainer">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" id="btnCreateSample">Create</button>
</div>
</div>
</div>
[ValidateAntiForgeryToken]
注释,因此上述脚本引发异常“Token不存在…”。为了解决这个问题,我更新了代码并添加了以下代码行
var token = $('input[name="__RequestVerificationToken"]').val();
$.ajax({
url: "/SessionData/Create",
type: "POST",
data: { $('#FormCreateSample').serialize(), __RequestVerificationToken: token },
success: function () {
alert("POST success");
},
error: function () {
alert("POST error");
}
});
sampleData
参数中传递null
值。下面是我在控制器中的操作方法
[HttpPost]
[ValidateAntiForgeryToken]
public void Create(SampleData sampleData)
{
if (ModelState.IsValid)
{
sampleData.SessionID = Convert.ToInt32(TempData["CurrentSessionId"]);
db.SampleDatas.Add(sampleData);
db.SaveChanges();
RedirectToAction("List", "SessionData");
}
}
有人知道为什么$(“FormCreateSample”).serialize()是null
?或者它可能找不到表单idFormCreateSample
短暂性脑缺血发作
更新1
使用第一个答案后,模型现在被传递给方法,但所有属性仍然是null
您需要在ajax调用的消息头中添加AntiForgeryToken:
var token = $('input[name="__RequestVerificationToken"]').val();
var tokenadr = $('form[action="/SessionData/Create"] input[name="__RequestVerificationToken"]').val();
var headers = {};
var headersadr = {};
headers['__RequestVerificationToken'] = token;
headersadr['__RequestVerificationToken'] = tokenadr;
$.ajax({
url: "/SessionData/Create",
type: "POST",
headers: headersadr,
data: "__RequestVerificationToken=" + token + "" + $('form[action="/SessionData/Create"]').serialize(),
success: function () {
alert("POST success");
},
error: function () {
alert("POST error");
}
});
您需要在ajax调用的消息头中添加AntiForgeryToken:
var token = $('input[name="__RequestVerificationToken"]').val();
var tokenadr = $('form[action="/SessionData/Create"] input[name="__RequestVerificationToken"]').val();
var headers = {};
var headersadr = {};
headers['__RequestVerificationToken'] = token;
headersadr['__RequestVerificationToken'] = tokenadr;
$.ajax({
url: "/SessionData/Create",
type: "POST",
headers: headersadr,
data: "__RequestVerificationToken=" + token + "" + $('form[action="/SessionData/Create"]').serialize(),
success: function () {
alert("POST success");
},
error: function () {
alert("POST error");
}
});
试着改变
.serialize()
到
试着改变
.serialize()
到
添加以下内容:内容类型:'application/json',
添加以下内容:内容类型:'application/json',在调试我的场景几天后,我现在找到了解决方案。我没有使用引导模式
,而是使用引导框
。使用Bootbox
修复了从验证到保存到数据库的所有问题
下面是我用来打开模态的脚本
<script>
$(document).ready(function () {
$("#modalCreateSample").on('click', function () {
$.ajax({
url: "/SessionData/Create",
type: 'GET',
success: function (data) {
bootbox.dialog({
title: "Create Session",
message: data,
buttons: {
success: {
label: "Save",
className: "btn-success",
callback: function () {
var form = $('#FormCreateSample');
form.data('validator', null);
$.validator.unobtrusive.parse(form);
if ($(form).valid()) {
$.post("/SessionData/Create", $("#FormCreateSample").serialize(), function (data, status) {
if (status == "success") {
// Refresh list of samples
return false;
}
});
} else {
return false;
}
}
}
}
});
},
error: function (error) {
bootbox.alert("We encounter problem while retrieving the Sample Code of the selected Session");
}
});
});
});
</script>
$(文档).ready(函数(){
$(“#modalCreateSample”)。在('单击',函数(){
$.ajax({
url:“/SessionData/Create”,
键入:“GET”,
成功:功能(数据){
bootbox.dialog({
标题:“创建会话”,
信息:数据,
按钮:{
成功:{
标签:“保存”,
类名:“btn成功”,
回调:函数(){
var form=$(“#FormCreateSample”);
表单数据('验证器',空);
$.validator.unobtrusive.parse(表单);
if($(form).valid()){
$.post(“/SessionData/Create”,$(“#FormCreateSample”).serialize(),函数(数据,状态){
如果(状态=“成功”){
//刷新样本列表
返回false;
}
});
}否则{
返回false;
}
}
}
}
});
},
错误:函数(错误){
alert(“我们在检索所选会话的示例代码时遇到问题”);
}
});
});
});
经过几天的场景调试,我现在找到了解决方案。我没有使用引导模式
,而是使用引导框
。使用Bootbox
修复了从验证到保存到数据库的所有问题
下面是我用来打开模态的脚本
<script>
$(document).ready(function () {
$("#modalCreateSample").on('click', function () {
$.ajax({
url: "/SessionData/Create",
type: 'GET',
success: function (data) {
bootbox.dialog({
title: "Create Session",
message: data,
buttons: {
success: {
label: "Save",
className: "btn-success",
callback: function () {
var form = $('#FormCreateSample');
form.data('validator', null);
$.validator.unobtrusive.parse(form);
if ($(form).valid()) {
$.post("/SessionData/Create", $("#FormCreateSample").serialize(), function (data, status) {
if (status == "success") {
// Refresh list of samples
return false;
}
});
} else {
return false;
}
}
}
}
});
},
error: function (error) {
bootbox.alert("We encounter problem while retrieving the Sample Code of the selected Session");
}
});
});
});
</script>
$(文档).ready(函数(){
$(“#modalCreateSample”)。在('单击',函数(){
$.ajax({
url:“/SessionData/Create”,
键入:“GET”,
成功:功能(数据){
bootbox.dialog({
标题:“创建会话”,
信息:数据,
按钮:{
成功:{
标签:“保存”,
类名:“btn成功”,
回调:函数(){
var form=$(“#FormCreateSample”);
表单数据('验证器',空);
$.validator.unobtrusive.parse(表单);
if($(form).valid()){
$.post(“/SessionData/Create”,$(“#FormCreateSample”).serialize(),函数(数据,状态){
如果(状态=“成功”){
//刷新样本列表
返回false;
}
});
}否则{
返回false;
}
}
}
}
});
},
错误:函数(错误){
alert(“我们在检索所选会话的示例代码时遇到问题”);
}
});
});
});
.serialize()
将包括令牌。没有必要再添加它。显示您的模型(它的属性是包含getter/setter还是仅包含字段?我还假设它的public ActionResult Create(SampleData-SampleData)
(而不是void
)@Stephen Muecke我的模型具有getter/setters和
<script>
$(document).ready(function () {
$("#modalCreateSample").on('click', function () {
$.ajax({
url: "/SessionData/Create",
type: 'GET',
success: function (data) {
bootbox.dialog({
title: "Create Session",
message: data,
buttons: {
success: {
label: "Save",
className: "btn-success",
callback: function () {
var form = $('#FormCreateSample');
form.data('validator', null);
$.validator.unobtrusive.parse(form);
if ($(form).valid()) {
$.post("/SessionData/Create", $("#FormCreateSample").serialize(), function (data, status) {
if (status == "success") {
// Refresh list of samples
return false;
}
});
} else {
return false;
}
}
}
}
});
},
error: function (error) {
bootbox.alert("We encounter problem while retrieving the Sample Code of the selected Session");
}
});
});
});
</script>