c# - ActionResult 上的 Httpost 方法无法存储数据
问题描述
我有ActionResult
使用的方法Httpost
,但是当我调试时它没有进入方法,只在 ActionResult 中结束使用HttpGet
。这可能是什么主要原因?我想将值存储回数据库列,此时它不这样做并且在浏览器上进行调试以及检查任何内容。
//GET/Courses-List
[HttpGet]
public ActionResult CoursesRegistration()
{
eNtsaCourses courses = new eNtsaCourses();
//courses.Course = Course;
return View();
}
[Route("Home/CoursesRegistration")]
[HttpPost]
public ActionResult CoursesRegistration([Bind(Include = "Id,Course,Nickname,Term, EnrolledAs, Published")] eNtsaCourses courses)
{
if(ModelState.IsValid)
{
try
{
cb.eNtsaCourse.Add(courses);
cb.SaveChanges();
return Json(new { success = true });
}
catch(Exception ex)
{
ModelState.AddModelError("", ex.Message);
}
}
return PartialView("CoursesRegistration", courses);
}
@using(Html.BeginForm("CoursesRegistration", "Home", FormMethod.Post, new { id="testForm", @class="form-horizontal"})) {
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Start New Course</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="form-group row">
<label for="CourseName" class="col-sm-3 col-form-label">CourseName</label>
<div class="col-sm-5">
@Html.EditorFor(model => model.CourseName, new { htmlAttributes = new { @class = "form-control", autofocus = "autofocus", placeholder = "CourseName" } })
</div>
</div>
<div class="form-group row">
<label for="Content-Licence" class="col-sm-3 col-form-label">Content Licence</label>
<div class="col-sm-5">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<a href="@Url.Action("CoursesRegistration", "Home")" class="btn btn-large btn-success" onclick="$('#exampleModal').modal('show');">Create Courses</a>
<script type="text/javascript">
$("#exampleModal.btn-success").click(function () {
saveData();
});
function saveData() {
$.ajax({
url: "/Home/CoursesRegistration",
data: $('#testForm').serialize(),
type: 'post',
success: function (data) {
if (data.Success) {
$("#exampleModal").modal('hide');
} else {
}
},
error: function (xhr, status) {
}
});
return false;
}
</script>
</div>
</div>
}
解决方案
好的几件事,为什么在剃须刀中使用 aHtml.BeginForm
然后用 ajax/js 覆盖它?
最好的选择是选择一种方法并使用它,我的偏好是将整个模式粘贴到部分中并使用 C# 对象作为该部分的模型,然后您可以使用 beginform 而不必乱用 ajax/js和序列化。
然后,您可以在控制器 POST 函数中输入模型的单个输入。
您是否检查过按钮是否真的在触发 js?我注意到你把它连接到
$("#exampleModal.btn-success").click(function () {
saveData();
});
什么时候应该
$("#exampleModal .btn-success").click(function () {
saveData();
});
也许粘贴一些控制台登录以检查它是否触发以及发送之前的数据是什么。
还将控制器函数更改为 httpget 以查看它是否找到路由正常,然后更改回 post 并且您应该知道它是控制器、路由还是前端代码。我怀疑前端代码。
推荐阅读
- mysql - 定义主键的区别——连同列名,在create table stmt的最后,create table stmt之后加上主键索引
- php - 日期和时间大于/小于比较在 Timber/Twig 中不适合我
- c++ - 为什么这段代码没有在我的崇高文本上打印输出?
- lua - CC Tweaked,我正在尝试制作一个采石场程序,但在比较数字与字符串时出现错误,但两个值都是数字
- swift - NSWindow 快速翻译动画
- angular - 如何在 Angular 中查看数据中的字段(订阅)
- sql-server - 我们可以在 SSIS 脚本任务或任何替代方案中使用压缩功能吗?
- qt - 如何在 QML 中混合重叠的 SVG
- javascript - 使用 PHP 在 JSON 文件中动态添加 HTML 标记
- html - 如何制作玻璃形态导航栏?