[英]Error getting information from two tables for editing - one-to-one relationship. C#
朋友们,我是初学者,我很难从具有一对一关系的两个表的数据库中获取信息
我目前收到此错误:
处理请求时发生未处理的异常。
错误
InvalidOperationException:传递到 ViewDataDictionary 的 model 项目的类型为“LojaVirtual.Models.person”,但此 ViewDataDictionary 实例需要“LojaVirtual.Models.ViewModels.Studress”类型的 model 项目
我试图用 PersonAddressViewModel 替换它,但我收到一条错误消息,指出它不是数据库表。 我仅将它创建为中间 class。 我怎样才能得到数据?
我有“人”和“地址”表。
下面我有“人”和“地址”的两种模型。
个人.cs
namespace LojaVirtual.Models
{
public class person
{
public int id_person { get; set; }
public string name { get; set; }
public string email { get; set; }
public string password { get; set; }
public string confirmpassword { get; set; }
[ForeignKey("id_person")]
[JsonIgnore]
public address Address { get; set; }
}
}
地址.cs
namespace LojaVirtual.Models
{
public class address
{
[Key]
public int id_address { get; set; }
public string city { get; set; }
public string state { get; set; }
[ForeignKey("person")]
public int? id_person { get; set; }
public virtual person Person { get; set; }
}
}
我创建了一个中间 class。 个人地址.cs
namespace LojaVirtual.Models.ViewModels.Student
{
public class PersonAddressViewModel
{
[Key]
public int id_person { get; set; }
public string name{ get; set; }
public string email { get; set; }
public string password { get; set; }
public string confirmpassword { get; set; }
public string city { get; set; }
public string state{ get; set; }
}
}
注册是在两个表中正常完成的,但是我很难将两个表的值填入的数据拿来进行编辑。
这是我的编辑方法:
[HttpGet]
public IActionResult Update()
{
person person = _clientRepository.getperson(_loginPerson.GetClient().id_person);
return View(person);
}
我的视图更新.cshtml
@model LojaVirtual.Models.ViewModels.Student.PersonAddressViewModel
@{
ViewData["Title"] = "Update";
}
<h2>Atualizar</h2>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Atualizar">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="id_person" />
<div class="form-group">
<label asp-for="name" class="control-label"></label>
<input asp-for="name" class="form-control" />
<span asp-validation-for="name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="email" class="control-label"></label>
<input asp-for="email" class="form-control" />
<span asp-validation-for="email" class="text-danger"></span>
.
.
.
.
<div class="form-group">
<label asp-for="city" class="control-label"></label>
<input asp-for="city" class="form-control" />
<span asp-validation-for="city" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="state" class="control-label"></label>
<input asp-for="state" class="form-control" />
<span asp-validation-for="state" class="text-danger"></span>
</div>
编辑
public person getperson(int id_person)
{
return _db.person.Find(id_person);
}
如果有人可以提供帮助,我将不胜感激。 非常欢迎任何评论!
Update
视图需要一个PersonAddressViewModel
类型 model,因此更新操作需要返回一个 PersonAddressViewModel 实例给它。 正如@insane_developer 提到的,您可以使用一些映射库,例如 Automapper。 没听说过也没关系,简单map一一听吧。
[HttpGet]
public IActionResult Update()
{
person person = _clientRepository.getperson(_loginPerson.GetClient().id_person);
var personAddressViewModel = new PersonAddressViewModel()
{
id_person = person.id_person;
name= person.name;
email = person.email;
password = person.password;
confirmpassword = person.confirmpassword;
city = (person.Address == null) ? null : person.Address.city;
state= (person.Address == null) ? null : person.Address.state
};
return View(personAddressViewModel);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.