【问题标题】:MVC3 submit two model view with dropdownlistfor from databaseMVC3 从数据库提交两个带有下拉列表的模型视图
【发布时间】:2012-12-19 17:26:22
【问题描述】:

我正在尝试从数据库中查询列表,该列表将显示在 dropdownlistfor 视图中,并且选择的结果将被发布。

问题是我在视图中使用了两个模型我尝试了更多选项

我迷路了,我不知道如何发布它。数据显示在列表框中没有问题。我在尝试发帖时收到此错误:

“没有 'IEnumerable' 类型的 ViewData 项 有键 'Item2.idcity'。” System.Exception {System.InvalidOperationException}

城市模型

public class CityModel
{
    public int idcity { get; set; }
    [Required]
    public string cityName { get; set; }

    public IEnumerable<CityModel> citys { get; set; }
}

医院模型

public class HospitalShowModels
{
    [Required]
    public string hospitalName { get; set; }
    [Required]
    public string cityName { get; set; }
}

HospitalControler.Create()

public ActionResult Create()
{
        ViewBag.cityModel = new SelectList(DataAccess.DAL.showCity(), "idcity", "cityName");
        var tuple = new Tuple<DataAccess.HospitalShowModels, DataAccess.CityModel>(new DataAccess.HospitalShowModels(), new DataAccess.CityModel());
        return View(tuple);
}

[HttpPost]
public ActionResult Create(DataAccess.HospitalShowModels model, DataAccess.CityModel model1)
{
        if (ModelState.IsValid) {
            DataAccess.DAL.insertHospital(model.hospitalName, model1.cityName);     
        }else{
            ModelState.AddModelError("","Invalid options");
        }
        return View();
}

查看.创建

@model Tuple<ProjektZaja.DataAccess.HospitalShowModels,ProjektZaja.DataAccess.CityModel>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>Create Hospital</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.Item1.hospitalName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Item1.hospitalName)
        @Html.ValidationMessageFor(model => model.Item1.hospitalName)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.Item1.cityName)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => Model.Item2.idcity,(IEnumerable<SelectListItem>)ViewBag.cityModel)
        @Html.ValidationMessageFor(model1 => Model.Item2.idcity)

【问题讨论】:

    标签: c# asp.net-mvc-3 ienumerable html.dropdownlistfor


    【解决方案1】:

    您不能对多个模型进行强类型视图。您需要创建一个视图模型,它只是一个包含其他两个类的复合类,并将视图强类型化到该视图模型。

    public class CreateViewModel
    {
      public CityModel CityModel {get; set;}
      public HospitalShowModel HospitalShowModel {get; set;}
    }
    

    然后将您的视图强输入到视图模型中

    @ model Full.Path.To.CreateViewModel
    

    并适当地访问模型属性

    Model.CityModel.cityName //etcetera...
    

    并在post方法中绑定

    [HttpPost]
    public ActionResult Create(CreateViewModel viewModel)
    {
      //...
    

    【讨论】:

      【解决方案2】:

      您视图中的模型类型应与发布操作中的模型类型相匹配。因此它应该是一个元组(虽然我个人不会使用它)或具有 2 个属性(一个用于城市,一个用于医院)的新模型类型

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-06
        • 2012-11-21
        • 2016-07-06
        • 2011-01-02
        • 1970-01-01
        相关资源
        最近更新 更多