c# - 在控制器中接收表单数据时出现问题。C# - MVC
问题描述
朋友们,我有3张桌子。人、学生和地址。人是一个通用表,有姓名、电子邮件、电话等字段。我有一个地址表来保存学生的地址。我无法动态地从地址字段中获取信息并完成新的学生注册。如果有人可以分析,我将不胜感激。
这是我的代码:我创建了一个 AddressViewModel 类来加入人员和地址字段。地址视图模型.cs
public class AddressViewModel
{
public string PES_NAME { get; set; }
public string PHONE { get; set; }
public string PES_EMAIL { get; set; }
.
.
//Address
public string STREET { get; set; }
public string CITY { get; set; }
public string STATE{ get; set; }
.
.
}
地址上下文.cs
public class AddressContext : DbContext
{
/*
* EF Core - ORM
* ORM -> Bibliteca mapear Objetos para Banco de Dados Relacionais
*/
public AddressContext(DbContextOptions<AddressContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasOne<Address>(s => s.Address)
.WithOne(ad => ad.Person)
.HasForeignKey<Address>(ad => ad.PES_COD);
modelBuilder.Entity<Person>()
.HasOne<Aluno>(s => s.Student)
.WithOne(ad => ad.Person)
.HasForeignKey<Student>(ad => ad.PersonID);
}
public DbSet<Person> Person { get; set; }
public DbSet<Student> Student { get; set; }
public DbSet<Address> Address { get; set; }
}
}
在这里,我不知道该怎么做才能以正确的方式带来表单数据:
PersonRepository.cs
public void create(Person person)
{
_banco.Add(person);
Student student = new Student();
student.Status = "A";
student.DataCadastro = "10/10/2020";
student.noFormularioRenach = "1010101";
student.CodSetor = 10;
student.PersonID = person.PES_COD;
_banco.Student.Add(student);
Address address = new Address();
address.STREET = ????????;
address.CITY = ????????;
_banco.Address.Add(address);
_banco.SaveChanges();
}
在学生的情况下,信息是插入银行,因为我直接在代码中告知,但学生的地址我不知道如何从表格中带上!
我像这样自动生成了我的表单:
@model LojaVirtual.Models.ViewModels.Student.AddressViewModel
@{
ViewData["Title"] = "Add";
}
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Add">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="PES_NAME" class="control-label"></label>
<input asp-for="PES_NAME" class="form-control" />
<span asp-validation-for="PES_NAME" class="text-danger"></span>
</div>
.
.
.
<div class="form-group">
<label asp-for=PHONE" class="control-label"></label>
<input asp-for="PHONE" class="form-control" />
<span asp-validation-for="PHONE" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="PES_EMAIL" class="control-label"></label>
<input asp-for="PES_EMAIL" class="form-control" />
<span asp-validation-for="PES_EMAIL" class="text-danger"></span>
</div>
.
.
<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>
<div class="form-group">
<label asp-for="STREET" class="control-label"></label>
<input asp-for="STREE" class="form-control" />
<span asp-validation-for="STREE" class="text-danger"></span>
.
.
.
.
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
个人控制器.cs
public IActionResult Add([FromForm]Models.Person person, string returnUrl = null)
{
if (ModelState.IsValid)
{
_clienteRepository.Add(person);
_loginCliente.Login(person);
TempData["MSG_S"] = "Success";
if (returnUrl == null)
{
return RedirectToAction("Index", "Home", new { area = "" });
}
else
{
return LocalRedirectPermanent(returnUrl);
}
}
return View();
}
如果有人可以提供帮助,我将不胜感激!
解决方案
您可以分别接收这两个参数(Person 和 Address),然后将地址添加到 person。
public IActionResult Add([FromForm] Person person, [FromForm] Address address)
{
person.Address = address;
//...
return View();
}
推荐阅读
- ruby-on-rails - RoR-显示页面不显示用户名
- macos - docker 容器网络未按预期工作
- html - 如何仅使用内联样式将表格行中的图像链接旁边的文本链接对齐?
- javascript - 如何在反应中向选项卡添加工具提示?
- angular - Angular Firestore - 异步请求有问题?
- css - 如何更改 asp.net DropDownList 的字体大小
- vb.net - 卡住:VB WinForm 将本地文件加载到 WebView
- php - 为什么这个 Laravel 代码返回一个空数组?
- kentico - k9中megamenu的教程/示例?
- ethereum - Solidity 0.5.0:TypeError 常量变量的初始值必须是编译时常量