【问题标题】:InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'System.Int32'InvalidOperationException:传递到 ViewDataDictionary 的模型项的类型为“System.Int32”
【发布时间】:2020-05-13 17:55:17
【问题描述】:

我在呈现特定表格元素的数据时遇到问题。该程序允许登录和注销。 所以我有私人教练课程

[Table("Personal_trainer")]
    public partial class PersonalTrainer
    {
        [Key]
        [Column("IDProfessor")]
        public int Idprofessor { get; set; }
        [Key]
        [Column("IDSocio")]
        public int Idsocio { get; set; }
        [Key]
        [Column("Data_Pedido", TypeName = "date")]
        public DateTime DataPedido { get; set; }
        [Column("data_Inicio", TypeName = "date")]
        public DateTime? DataInicio { get; set; }
        [Column("data_fim", TypeName = "date")]
        public DateTime? DataFim { get; set; }

        [ForeignKey(nameof(Idprofessor))]
        [InverseProperty(nameof(Professores.PersonalTrainer))]
        public virtual Professores IdprofessorNavigation { get; set; }
        [ForeignKey(nameof(Idsocio))]
        [InverseProperty(nameof(Socios.PersonalTrainer))]
        public virtual Socios IdsocioNavigation { get; set; }
    }
}

我有 Socios 课程

public partial class Socios
    {

        public Socios()
        {
            Gerir = new HashSet<Gerir>();
            Mensagem = new HashSet<Mensagem>();
            Participa = new HashSet<Participa>();
            PersonalTrainer = new HashSet<PersonalTrainer>();
            Peso = new HashSet<Peso>();
            PlanosExercicios = new HashSet<PlanosExercicios>();
        }

        [Key]
        [Column("IDSocio")]
        public int Idsocio { get; set; }
        [Required]
        [Column("email")]
        [StringLength(100)]
        public string Email { get; set; }
        [Required]
        [Column("telefone")]
        [StringLength(20)]
        public string Telefone { get; set; }
        [Required]
        [Column("fotografia")]
        [StringLength(40)]
        public string Fotografia { get; set; }
        [Column("sexo")]
        public bool Sexo { get; set; } // true- Feminino
                                       //  false" - Masculino
        [Column("altura")]
        public double Altura { get; set; }
        [Required]
        [Column("nome_utilizador")]
        [StringLength(50)]
        public string NomeUtilizador { get; set; }
        [Column("peso_inicial")]
        public double PesoInicial { get; set; }
        [Required]
        [Column("_password")]
        [StringLength(20)]
        public string Password { get; set; }
        [Column("estado")]
        public int Estado { get; set; } // 1 ativo, 0 suspenso 


        //[Column("mensalidade")]
        //public bool Mensalidade { get; set; } //0-nao pago  1-pago

        [InverseProperty("IdsocioNavigation")]
        public virtual ICollection<Gerir> Gerir { get; set; }
        [InverseProperty("IdsocioNavigation")]
        public virtual ICollection<Mensagem> Mensagem { get; set; }
        [InverseProperty("IdsocioNavigation")]
        public virtual ICollection<Participa> Participa { get; set; }
        [InverseProperty("IdsocioNavigation")]
        public virtual ICollection<PersonalTrainer> PersonalTrainer { get; set; }
        [InverseProperty("IdsocioNavigation")]
        public virtual ICollection<Peso> Peso { get; set; }
        [InverseProperty("IdsocioNavigation")]
        public virtual ICollection<PlanosExercicios> PlanosExercicios { get; set; }


    }
}

还有教师课

public partial class Professores
    {
        public Professores()
        {
            MapaAulasGrupo = new HashSet<MapaAulasGrupo>();
            Mensagem = new HashSet<Mensagem>();
            PersonalTrainer = new HashSet<PersonalTrainer>();
            Peso = new HashSet<Peso>();
            PlanosExercicios = new HashSet<PlanosExercicios>();
        }

        [Key]
        [Column("IDProfessor")]
        public int Idprofessor { get; set; }
        [Required]
        [Column("nome")]
        [StringLength(50)]
        public string Nome { get; set; }
        [Required]
        [Column("email")]
        [StringLength(100)]
        public string Email { get; set; }
        [Column("telefone")]
        public int Telefone { get; set; }
        [Required]
        [Column("fotografia")]

        public string Fotografia { get; set; }
        [Column("sexo")]
        public bool Sexo { get; set; }
        [Required]
        [Column("especialidade")]
        [StringLength(50)]
        public string Especialidade { get; set; }
        [Column("estado")]
        public int Estado { get; set; }
        [Required]
        [Column("_password")]
        [StringLength(20)]
        public string Password { get; set; }

        [InverseProperty("IdprofessorNavigation")]
        public virtual ICollection<MapaAulasGrupo> MapaAulasGrupo { get; set; }
        [InverseProperty("IdprofessorNavigation")]
        public virtual ICollection<Mensagem> Mensagem { get; set; }
        [InverseProperty("IdprofessorNavigation")]
        public virtual ICollection<PersonalTrainer> PersonalTrainer { get; set; }
        [InverseProperty("IdprofessorNavigation")]
        public virtual ICollection<Peso> Peso { get; set; }
        [InverseProperty("IdprofessorNavigation")]
        public virtual ICollection<PlanosExercicios> PlanosExercicios { get; set; }
    }
}

所以我希望当我以会员身份登录时,我可以通过列表查看注册教师的个人资料并详细选择并查看。问题是视图出现了,但只显示字段的名称 数据不出现。 我想通过我的个人资料(以合作伙伴身份登录)查看我的私人教练的个人资料。 在 Socios 控制器中,我有这个功能,以便向我展示我的私人教练的个人资料。通过这个方法,我创建了一个视图详细信息。

 public IActionResult VerPT(PersonalTrainer personalTrainer, Professores professores, int? id)
        {
            int x = Convert.ToInt32(HttpContext.Session.GetInt32("UserId"));


            foreach (var item in _context.Socios)
            {


                if (item.NomeUtilizador == User.Identity.Name)
                {
                    personalTrainer.Idsocio = item.Idsocio;
                    personalTrainer.Idprofessor = professores.Idprofessor;
                    id = personalTrainer.Idprofessor;
                }
            }
            return View(personalTrainer);
        }

在控制器老师我有这个功能为了能够看到老师的个人资料,通过这个方法我创建了一个查看详细信息。

public async Task<IActionResult> VerProfessor(int? id)
        {

            if (id == null)
            {
                return NotFound();
            }
            var professores = await _context.Professores
                .FirstOrDefaultAsync(m => m.Idprofessor == id);
            if (professores == null)
            {
                return NotFound();
            }

            return View();



        }

在verPT视图中我有

@model WebApplication1.Models.PersonalTrainer

@{
    ViewData["Title"] = "VerPT";
}

    <style>
        body {
            padding-top: 0px;
            background-color: darkgray;
            background-image: url();
            background-image: url();
            background-repeat: no-repeat;
        }
    </style>

<div>
    <h4>Personal Trainer</h4>
    <hr />
    <dl class="row">
        <dt class = "col-sm-2">
            Data de inicio :
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.DataInicio)
        </dd>

        <dt class = "col-sm-2">
            Email 
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.IdprofessorNavigation.Email)
        </dd>

    </dl>
</div>
<div>

    <a asp-action="PerfilSocio">Voltar</a>
</div>

在教授看来,我有

@model WebApplication1.Models.Professores
@{
    ViewData["Title"] = "VerProfessor";
}

<style>

    body {
        padding-top: 0px;
        background-color: gray;
        background-image: url();
        background-image: url();
        background-repeat: no-repeat;
    }
</style>
<br />
<br />

<div style="color:white">


    <dl class="row">
        @*<dt class="col-sm-2">
                @Html.DisplayNameFor(model => model.Fotografia)
            </dt>*@
        <dd class="col-sm-10">
            <img src="~/Fotos/ + model.Fotografia " />

        </dd>
        <br />

        <p>Contactos </p>

        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Nome)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Nome)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Email)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Email)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Telefone)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Telefone)
        </dd>

        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Sexo)
        </dt>
        <dd class="col-sm-10">
            @if (@Html.DisplayNameFor(model => model.Sexo) == "true")
            {
                <p>Feminino</p>
            }
            else
            {
                <p>Masculino</p>
            }
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Especialidade)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Especialidade)
        </dd>

    </dl>
</div>

<div>

    <a asp-action="ListarProfessores">Voltar < </a>
</div>

<br />
<br />
<br />
<br />
<br />
<br />

【问题讨论】:

  • 在选择标签时请小心,不要选择e.g. C 语言标记而不是 C# 标记。
  • 你能告诉我你对VerProfessorVerPT的看法吗?
  • 也是吗? VerPt 功能是为了让我可以看到我的私人教练的资料,而verprofessor 功能是为了通过列表我可以看到该老师的详细信息,当我以合作伙伴身份登录时,我想这样做,但是视图中的字段显示没有数据
  • @rsd_17 是的,这会有所帮助,因为我需要查看您将什么模型发送到 Views,以及您如何在 html 标签中构建模型数据
  • 也就是想看看VerPT和verprofessor是怎么看的?

标签: html asp.net-core


【解决方案1】:

错误很明显:您需要向您的View 发送Model 类型,但您发送的是int,在您的情况下为id。由于您需要在视图中显示培训师资料,因此您需要将模型类型更改为:

WebApplication1.Models.PersonalTrainer 

在你的View

return View(personalTrainer) 

在你的Controller

【讨论】:

  • Shama,你好,我按我说的做了,出现了这个错误:InvalidOperationException:传入ViewDataDictionary的模型项是'WebApplication1.Models.PersonalTrainer'类型,但是这个ViewDataDictionary实例需要一个模型“WebApplication1.Models.Socios”类型的项目。
  • @rsd_17 _Layout.cshtml 是否声明了@model 类型?
  • 您好,您能帮我查看正在加载的视图,但不要显示私人教练数据
  • @rsd_17 好的。您需要在Controller 端生成私人教练数据,然后在视图上显示教练所需的属性。您现在遇到什么问题?
  • 所以,我想将老师的 id 传递给视图,以便向我显示他的数据。通过 Socio 个人资料,我想查看您的私人教练的个人资料,但视图显示时未填写数据。我有一个向我显示教师列表的视图,但是当我单击链接查看个人资料时,仍然会出现未填充的视图。
猜你喜欢
  • 2020-01-12
  • 2022-01-17
  • 2020-05-10
  • 1970-01-01
  • 2022-08-03
  • 2022-06-27
  • 2022-01-19
  • 2021-09-21
  • 1970-01-01
相关资源
最近更新 更多