如何使用代码优先数据库创建 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
我在编码方面还是新手,不确定自己做错了什么
提前致谢
代码首先根据我们的类为我们创建了一个数据库,请参考以下链接获取您的答案:
首先,根据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
这是我的 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 我在编码方面还是新手,不确定自己做错了什么 提前致谢
代码首先根据我们的类为我们创建了一个数据库,请参考以下链接获取您的答案:
首先,根据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