我有两个问题:
首先,我编写了一个代码,将医生添加到数据库中,开始时代码工作正常,但是在添加验证后,医生信息未添加到表中。当我按添加按钮时,URL转到:/ Doctors / Save为何执行数据没有保存在数据库中?为什么在按下添加按钮后,程序无法将我重定向到添加视图?
在控制器中,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");
}
谢谢!
好吧,对于您所说的,我相信:
首先,我编写了一个代码,将医生添加到数据库中,开始时代码工作正常,但是在添加验证后,医生信息未添加到表中。当我按添加按钮时,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视图。Save()操作用于Add视图内部的Html.BeginForm(“ Save”,“ Doctors”)。
您没有被重定向到“添加视图”,因为您没有成功保存医生(ModelState无效),因此它仅呈现“添加”视图(URL保持为/ Doctors / Save),而不重定向到该视图。
第二个问题:
从表中删除所有记录后,是否可以从控制器中重置ID?
不知道这个问题的答案,也许您应该将问题分成两部分,这样人们才可以回答一个问题,而不能回答另一个问题。
问候,
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句