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

时间:2016-11-05 15:49:13

标签: c# html asp.net-mvc database visual-studio

我有两个问题:

首先我编写了一个代码来将医生添加到数据库中,一开始代码工作正常,但在添加验证后医生信息没有添加到表格中...当我按下添加按钮时,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");
    }

谢谢!

2 个答案:

答案 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吗? 也许你可以展示医生类