簡體   English   中英

從兩個表中獲取信息以進行編輯時出錯 - 一對一關系。 C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM