使用MVC 5添加到表中,并在删除记录后重置Id
本文关键字:记录 删除 Id MVC 添加 使用 | 更新日期: 2023-09-27 18:16:23
我有两个问题:
首先,我写了一个代码来添加医生到数据库中,在开始的代码工作得很好,但在添加验证后,医生信息没有添加到表中。当我按下添加按钮时,URL转到:/Doctors/Save为什么数据没有保存在数据库中?为什么在我按下添加按钮后,程序没有将我重定向到添加视图?
在控制器中,Add()
动作用于包含添加表单的添加视图。Save()
动作是针对Add
视图内的Html.BeginForm("Save","Doctors")
.
public ActionResult Add()
{ return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Save(Doctor doctor)
{
if (!ModelState.IsValid)
{
var viewModel = new DoctorViewModel
{
Doctor = doctor
};
return View("Add", viewModel);
}
if(doctor.Id == 0) {
_context.Doctors.Add(doctor);
_context.SaveChanges();
return Redirect("Add");
}
else
{
var doctorInDb = _context.Doctors.Single(c => c.Id == doctor.Id);
doctorInDb.Name = doctor.Name;
doctorInDb.Symbol = doctor.Symbol;
doctorInDb.Office = doctor.Office;
doctorInDb.Phone = doctor.Phone;
doctorInDb.Email = doctor.Email;
_context.SaveChanges();
return Redirect("Add");
}
}
添加视图:
@model Project.ViewModels.DoctorViewModel
@{
ViewBag.Title = "Add";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Adding a Doctor</h2>
@using (Html.BeginForm("Save", "Doctors"))
{
<div class="form-group">
@Html.LabelFor(m => m.Doctor.Name)
@Html.TextBoxFor(m => m.Doctor.Name , new { @class = "form-control"})
@Html.ValidationMessageFor(m => m.Doctor.Name)
</div>
<div class="form-group">
@Html.LabelFor(m => m.Doctor.Symbol)
@Html.TextBoxFor(m => m.Doctor.Symbol, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Doctor.Symbol)
</div>
<div class="form-group">
@Html.LabelFor(m => m.Doctor.Phone)
@Html.TextBoxFor(m => m.Doctor.Phone, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Doctor.Phone)
</div>
<div class="form-group">
@Html.LabelFor(m => m.Doctor.Office)
@Html.TextBoxFor(m => m.Doctor.Office, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.Doctor.Email)
@Html.TextBoxFor(m => m.Doctor.Email, new { @class = "form-control" })
</div>
@Html.HiddenFor(m => m.Doctor.Id)
@Html.AntiForgeryToken()
<button type="submit" class="btn btn-primary"> <h5> Add </h5> </button> @Html.ActionLink("Go to doctors list", "DoctorList")
}
@section scripts{
@Scripts.Render("~/bundles/jqueryval")
}
第二个问题:
我可以重置Id,从表中删除所有记录后,从控制器?
这是我的重置代码:
public ActionResult Reset()
{
_context.PSRs.RemoveRange(_context.PSRs);
_context.SaveChanges();
return Redirect("PSR");
}
谢谢!
好吧,听你这么说,我相信:
首先,我写了一个代码来添加医生到数据库中,在开始的时候代码工作得很好,但在添加了医生信息验证之后未添加到表..当我按下添加按钮URL转到:/Doctors/Save为什么数据没有保存在数据库中?
看起来数据没有保存在数据库中的原因是因为你的模型无效:
if (!ModelState.IsValid)
{
var viewModel = new DoctorViewModel
{
Doctor = doctor
};
return View("Add", viewModel);
}
所以你可以调试你的代码,看看为什么它是无效的。如果需要,可以插入以下代码:
var message = string.Join(" | ", ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage));
在var viewModel
之前,并在它上面有一个断点,这样你就不需要在调试期间导航属性。
And why after I按下添加按钮程序没有重定向到添加视图?
在控制器中,Add()动作用于添加视图,其中包含添加形式…Save()操作用于Html.BeginForm("Save","Doctors"),它位于Add视图内。
你没有被重定向到"添加视图",因为你没有成功地保存医生(ModelState无效),因此它只是渲染添加视图(URL保持为/Doctors/Save),而不是重定向到它。
第二个问题:
我可以重置Id,从表中删除所有记录后,从控制器吗?
不知道这个问题的答案,也许你应该把问题分成两个,这样人们可以回答一个问题而不回答另一个问题。
认为,
第二个问题我也不知道。但对于第一个:您确定医生Id被设置为自动生成密钥吗?也许你可以显示医生类