使用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");
    }

谢谢!

使用MVC 5添加到表中,并在删除记录后重置Id

好吧,听你这么说,我相信:

首先,我写了一个代码来添加医生到数据库中,在开始的时候代码工作得很好,但在添加了医生信息验证之后未添加到表..当我按下添加按钮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被设置为自动生成密钥吗?也许你可以显示医生类