如何解决如何使用JQuery AJAX将模型传递给控制器?
我制作了调用let array2 = [{'somevalue': '1'},{'somethingelse': '2'},{'somethingmore': '3'}];
let array1 = [ {'somevalue': '1'},{} ];
let array3 = [{'somevalue': '1'},{},{'somethingmore': '3'}];
let result = (array1.length===array2.length) &&
array1.every(obj => Object.keys(obj).length);
console.log('Same length without delete empty objects:',result);
let result2 = (array3.filter(obj => Object.keys(obj).length).length === array2.length);
console.log('Same length with delete empty objects:',result2);
的AJAX。但是我不能将模型传递给它,我只能传递一个字符串。我的问题是如何通过模型?
AJAX
IActionResult
控制器
$('#CreateLesson').on('submit',function (e) {
e.preventDefault();
var lesson = $(this).serialize();
$.ajax({
type: "POST",url: '@Url.Action("Create","Lessons")',dataType: "json",async: false,contentType: "application/json; charset=utf-8",data: JSON.stringify(lesson),success: function (data) { alert("succes"); },error: function (error) {
console.log(error);
alert(JSON.stringify(error));
}
});
});
文字出来很奇怪。它具有比模型更多的字段。我的模型只有名称,等级,目标,描述。
“名称= C%23%20vvvvvv&等级= 1&子ID = 123&条形码= vvvvvvnnnnnnnnnnnnnn与目标= ABC%40abc123&描述= ABC%40abc123&__ RequestVerificationToken = CfDJ8Ekvaq-NSQtAn7SGG0DJv7-ETDuOvAlwPoMzNMGyUSfJ6RRc2UY3KRxQbq0VEzBRE-YgHTSeMtnKY8DqTKXk8GoGsvkcB87xEM0-G5zbBO6BtoWLncH1ROE7iE2kiUbjBsPg_pwzZpXPUhS9_Nb14ay02l-N_DSULUT22cTa8zY5zpcyHY5Nsp-mN7tfLYiOGA”
当我尝试不带字符串化就传递模型并更改 [HttpPost]
//[ValidateAntiForgeryToken]
public IActionResult Create([FromBody]string lesson)
{
if (ModelState.IsValid)
{
_context.Add(lesson);
_context.SaveChanges();
return PartialView("_MyLessons",lesson);
}
return RedirectToAction("AjaxMetho","Account");
//return PartialView("Create");
}
的参数以获取“课程模型”而不是字符串时,我会得到null!
我应该怎么做才能通过模型探查?
解决方法
您似乎想通过Ajax提交表单中的数据,然后在后台接收模型。这是一个简单的示例(我在formData中传递了数据,因此控制器不需要[FromBody]):
查看:
<form method="post" id="CreateLesson" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<h4>Name</h4>
<input type="text" class="form-control" name="name" value="" />
<h4>Grade</h4>
<input type="text" class="form-control" name="grade" value="" />
<h4>Objectives</h4>
<input type="text" class="form-control" name="objectives" value="" />
<h4>Description</h4>
<input type="text" class="form-control" name="description" value="" />
<input type="submit" value="Create" class="btn btn-primary" />
</form>
您认为JS:
@section Scripts{
<script>
$('#CreateLesson').submit(function (e) {
e.preventDefault();
var formData = new FormData($('#CreateLesson')[0]);
$.ajax({
type: "POST",url: "/Lessons/Create",async: true,data: formData,cache: false,processData: false,contentType: false,success: function (data) {
console.log("Ok")
},error: function (data) {
}
});
</script>}
您的控制器:
public IActionResult Create()
{
return View();
}
[HttpPost]
//[ValidateAntiForgeryToken]
public IActionResult Create(Lesson lesson)
{
return RedirectToAction("AjaxMetho","Account");
}
结果:
,我找到了一个更简单的解决方案
// View
//<form id="CreateLesson" asp-action="Create" asp-controller="Lessons" method="post" enctype="multipart/form-data">
// Ajax
$('#CreateLesson').on('submit',function (e) {
e.preventDefault();
var lesson = $(this).serialize();
var Url = $(this).attr('action');
$.post(Url,lesson);
});
// Controller
//public JsonResult Create(Lesson lesson) { }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。