Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 MVC3下拉列表,显示每个项目的多个属性_Asp.net Mvc 3_Properties_Drop Down Menu_Viewbag - Fatal编程技术网

Asp.net mvc 3 MVC3下拉列表,显示每个项目的多个属性

Asp.net mvc 3 MVC3下拉列表,显示每个项目的多个属性,asp.net-mvc-3,properties,drop-down-menu,viewbag,Asp.net Mvc 3,Properties,Drop Down Menu,Viewbag,我想在我的视图中有一个dropdownlist,显示患者的ID、名字和姓氏。使用下面的代码,它将显示每个患者的名字。如何将所有三个属性传递到viewbag中,并使它们显示在dropdownlist中 控制器 public ActionResult Create() {ViewBag.Patient_ID = new SelectList(db.Patients, "Patient_ID", "First_Name"); return View()

我想在我的视图中有一个dropdownlist,显示患者的ID、名字和姓氏。使用下面的代码,它将显示每个患者的名字。如何将所有三个属性传递到viewbag中,并使它们显示在dropdownlist中

控制器

public ActionResult Create()
            {ViewBag.Patient_ID = new SelectList(db.Patients, "Patient_ID", "First_Name");
             return View();
            } 
看法

视图模型

看法


我建议您不要使用任何ViewBag并定义视图模型:

public class MyViewModel
{
    [Required]
    public int? SelectedPatientId { get; set; }
    public IEnumerable<SelectListItem> Patients { get; set; }
}
最后,在强类型视图中显示下拉列表:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.DropDownListFor(
        x => x.SelectedPatientId, 
        Model.Patients, 
        "-- Select patient ---"
    )
    @Html.ValidationMessageFor(x => x.SelectedPatientId)
    <button type="submit">OK</button>
}

实现这一点的简单方法是通过修改模型类或添加/修改部分类在模型上创建附加属性

[NotMapped]
public string DisplayFormat
{
    get
    {
      return string.Format("{0}-{1}-{2}", Patient_ID, First_Name, Last_Name);
    }  
}

修改模型时,我收到以下错误。我使用了数据库优先的方法。错误1错误3004:映射从第561行开始的片段时出现问题:未为Set Patients中的properties Patient.DisplayList指定映射。当:实体类型为[CAHODModel.Patient]时,具有键PK的实体不会往返。对,您应该在该参数前面加上[NotMapped]前缀。我已更新了我的样本。请看一看,我不相信我能用这种方法。除了包含患者姓名列表的下拉列表外,我还有其他包含其他实体数据的下拉列表。我的创建视图是Models.Rx的强类型。处方包含患者、处方医生和药物之间的关系。如果我遵循您的方法,我将无法在MyViewModel中插入任何不在MyViewModel中的内容,对吗?@DanielHendrix,在更新的示例中,您已正确添加了另一个字段来保存“处方药”下拉列表。然后在create视图中实例化这个视图模型var model=new MyViewModel,然后查询数据库或任何东西,并将结果存储在一些局部变量中,例如患者、处方药和药物,但从未设置视图模型的任何属性。您需要将它们设置为模型。患者=患者。。。返回视图之前。该错误通常意味着您的项目列表为空
@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

     @Html.DropDownListFor(
        x => x.SelectedPatientId,
        Model.Patients,
        "-- Select patient ---"
    )
    @Html.ValidationMessageFor(x => x.SelectedPatientId)
    <button type="submit">OK</button>

         @Html.DropDownListFor(
        x => x.SelectedPrescriber,
        Model.Patients,
        "-- Select prescriber ---"
    )
    @Html.ValidationMessageFor(x => x.SelectedPrescriber)
    <button type="submit">OK</button>
}
public class MyViewModel
{
    [Required]
    public int? SelectedPatientId { get; set; }
    public IEnumerable<SelectListItem> Patients { get; set; }
}
public ActionResult Create()
{
    var model = new MyViewModel
    {
        Patients = db.Patients.ToList().Select(p => new SelectListItem
        {
            Value = p.Patient_ID.ToString(),
            Text = string.Format("{0}-{1}-{2}", p.Patient_ID, p.First_Name, p.Last_Name)
        });
    };
    return View(model);
} 
@model MyViewModel
@using (Html.BeginForm())
{
    @Html.DropDownListFor(
        x => x.SelectedPatientId, 
        Model.Patients, 
        "-- Select patient ---"
    )
    @Html.ValidationMessageFor(x => x.SelectedPatientId)
    <button type="submit">OK</button>
}
[NotMapped]
public string DisplayFormat
{
    get
    {
      return string.Format("{0}-{1}-{2}", Patient_ID, First_Name, Last_Name);
    }  
}