gpt4 book ai didi

c# - MVC 下拉列表未映射到模型

转载 作者:行者123 更新时间:2023-11-30 12:16:35 28 4
gpt4 key购买 nike

我正在尝试使用 EF codefirst 在 MVC 3 中开发应用程序。当我使用 int 属性和约定来设置外键关系时,例如

public class Patient  
{
public int ConsultantId {get;set;}
}

然后我设置一个创建和编辑页面并使用 HTML.DropDownListFor Helper 生成可能的顾问列表

 @Html.DropDownListFor(model => model.ConsultantId, ((IEnumerable<Web.Models.Consultant>)ViewBag.PossibleConsultants).Select(option
=> new SelectListItem
{
Text = Html.DisplayTextFor(_ => option.ConsultantName).ToString(),
Value
= option.ConsultantId.ToString(),
Selected = (Model != null) && (option.ConsultantId
== Model.ConsultantId)
}), "Choose...")

这很好用,但我现在想在患者类上使用 Consultant 对象,例如

 public class Patient  
{
public virtual Consultant Consultant {get;set;}
}

public class Consultant {
public virtual ICollection<Patient> Patient {get;set;}
}

我现在尝试使用 DropDownListfor 设置 View ,但这次是在模型上。例如顾问

  @Html.DropDownListFor(model => model.Consultant, ((IEnumerable<Web.Models.Consultant>)ViewBag.PossibleConsultants).Select(option
=> new SelectListItem
{
Text = Html.DisplayTextFor(_ => option.ConsultantName).ToString(),
Value
= option.ConsultantId.ToString(),
Selected = (Model != null) && (option.ConsultantId
== Model.Consultant.ConsultantId)
}), "Choose...")

创建和编辑页面正确加载,并且在编辑页面上正确选择了顾问,但是当我发布页面时,ModelState 因出现此错误“无法转换
'System.String' 键入 'Web.Models.Consultant'。有谁知道如何使用 DropDownListFor 以便可以将模型映射回对象。

最佳答案

我找到了适合我的解决方案。使用 Entity Framework codefirst,您可以在同一类中同时拥有 public int ConsultantId 属性和 public virtual Consultant 属性。数据库中仍然只有一种关系,它由 ConsultantId 属性定义。因此,如果这是一个可为 null 的 int,则该关系将是可选的。

关于c# - MVC 下拉列表未映射到模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5043213/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com