如何使用代码优先数据库创建 Edit/Delete/Create 视图

How to Create the Edit/Delete/Create Views With a Code first database

这是我的 ClientController 模型

namespace CV_Website.Models
{
public class Clients
{
    [Key]

    public int ID { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }

.......

    public List<CV> cVs;

}
public class CV
{
    public string ID { get; set; }
    public string Name { get; set; }
    public string Job { get; set; }
    public bool Public { get; set; }
}
}

还有我的 DbContext

namespace CV_Website.Models
{
public class ClientsContext : DbContext
{
 public ClientsContext() : base("name=ClientsContext")
    {
    }

    public DbSet<Clients> Clients { get; set; }

}

我已经能够使用硬编码用户(用于测试)填充视图,但不能从模型中填充视图

这是我的硬编码用户

 public List<Clients> GenerateCV()
    {
     data.AllClients.Clear()
     List<Clients> result = new List<Clients>();
     List<ClientsContext> contexts = new List<ClientsContext>()
     Clients test = new Clients
     {
         Name = "John",
         Age = 18,
         Gender = "Male",

... };

     Clients test2 = new Clients
     {
         Name = "Sam",
         Age = 18, 
         Public = true

... };

        result.Add(test);
        result.Add(test2);

        return result;
    }`

我不确定如何使用 MVC 脚手架工具添加 Create/Edit/View 视图,我通常会得到一个 System.NullReferenceException 我在编码方面还是新手,不确定自己做错了什么 提前致谢

代码首先根据我们的类为我们创建了一个数据库,请参考以下链接获取您的答案:

Basics for code first approach

Code first demo

首先,根据Microsoft's naming conventions,classes应该是名词,所以我将Clients重命名为Client。

正如您所说,您对数据库没有问题,我将专注于控制器和视图。

列出客户

您的客户端控制器中的以下操作将 return 从您的数据库到视图的客户端列表:

// GET: CV_Website/Clients/ClientList
[HttpGet]
public ActionResult ClientList()
{
    //using statement disposes the connection to the database once query has completed
    using (var context = new ClientContext())
    {
        //.ToList runs the query and maps the result to List<Client>
        var clients = context.Clients.ToList();
    }

    //Return view with list of clients as the model
    return View("ClientList", clients);
}

只需右键单击此方法中的任意位置,然后 select 添加视图即可创建视图。

如果您 select 'List' 作为模板,'Client (CV_Website.Models)' 作为模型 class,它将创建一个视图,列出列表中每个客户的详细信息.

在View中,可以看到如下几行代码:

@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ })
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })

这些 URL 指向您的控制器中的操作。

编辑客户端

例如,这里是编辑的实现:

//Added third parameter to clearly point to 'Client' controller
@Html.ActionLink("Edit", "Edit", "Client", new { id=item.ID })

此 URL 指向客户端控制器中名为 Edit 的操作,该操作将读取另一个名为 'Edit' 的视图。实现看起来类似于:

// GET: CV_Website/Clients/Edit/1
[HttpGet]
public ActionResult Edit(int id)
{
    using (var context = new ClientContext())
    {
        //Using Linq, select the client with the matching ID or return null
        var client = context.Clients.SingleOrDefault(c => c.Id == id);
    }

    return View("ClientList", client);
}

再次右键单击并select 添加视图。这次再次选择编辑模板和客户端模型。

这将创建一个带有可提交给控制器的表单的视图。为了提高可读性,我会这样写 using 语句:

@using (Html.BeginForm("Edit", "Client", FormMethod.Post))

编辑操作的实现与此类似:

// POST: CV_Website/Clients/Edit/{Client}
[HttpPost]
public ActionResult Edit(Client client)
{
    using (var context = new ClientContext())
    {
        //Get client from database
        var clientInDb = context.Clients.SingleOrDefault(c => c.Id == client.ID);

        //Update client using properties from the client parameter
        clientInDb.Age = client.Age;
        clientInDb.Gender = client.Gender;
        clientInDb.Name = client.Name;
        clientInDb.Surname = client.Surname;

        //Commit changes to the database
        context.SaveChanges();
    }

    return View("ClientList", client);
}

这会更新数据库中的客户端并保存更改。


我希望这有助于您入门。

有关 DbContext 的更多信息 here