我有两个问题:
首先我编写了一个代码来将医生添加到数据库中,一开始代码工作正常,但在添加验证后医生信息没有添加到表格中...当我按下添加按钮时,URL会转到: /医生/保存 为什么数据没有保存在数据库中?为什么在按下“添加”按钮后,程序不会将我重定向到“添加视图”?
在控制器中,Add()
操作适用于包含添加表单的添加视图。Save()
操作适用于Html.BeginForm("Save","Doctors")
视图中的Add
。
这是我的代码:
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");
}
谢谢!
答案 0 :(得分:0)
嗯,对于你所说的我相信:
首先,我写了一个代码,将医生添加到数据库中 代码工作正常,但在添加验证医生信息后 没有添加到表.. 当我按下添加按钮时,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
及其断点,因此您无需在调试期间在属性中导航。
为什么在我之后 按下添加按钮程序不会将我重定向到添加视图?
在控制器中,Add()动作用于包含的Add视图 添加表单..保存()动作是为了 添加视图中的Html.BeginForm(“保存”,“医生”)..
您没有重定向到“添加视图”,因为您没有成功保存医生(ModelState无效)因此它只是呈现添加视图(URL保持为/医生/保存)但不重定向到它。
第二个问题:
从表中删除表中的所有记录后,是否可以重置Id 控制器?
不知道这个问题的答案,也许你应该将问题分成两部分,这样人们就可以回答一个问题但不回答另一个问题。
此致
答案 1 :(得分:0)
我不知道第二个问题。 但对于第一个: 您确定Doctor Id被设置为AutoGenerated Key吗? 也许你可以展示医生类