这是我的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和views,我通常会得到System.NullReferenceException 我对编码还是很陌生,不确定自己在做什么错 在此先感谢
答案 0 :(得分:0)
答案 1 :(得分:0)
首先,类应该是根据Microsoft's naming conventions的名词,因此我将Clients重命名为Client。
正如您所说的,数据库没有问题,我将重点介绍控制器和视图。
客户端控制器中的以下操作会将客户端列表从数据库返回到视图:
// 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);
}
只需右键单击此方法中的任意位置,然后选择“添加视图”即可创建视图。
如果选择“列表”作为模板,选择“客户端(CV_Website.Models)”作为Model类,它将创建一个视图,该视图列出列表中每个客户端的详细信息。
在视图中,您可以看到以下代码行:
@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。
作为示例,这是Edit的实现:
//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);
}
再次单击鼠标右键,然后选择“添加视图”。这次再次选择“编辑”模板和客户端模型。
这将创建一个具有可提交给控制器的表单的视图。为了提高可读性,我将这样编写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
的更多信息