2013-01-05 41 views
0

我想查詢數據庫列表將顯示在dropdownlistfor在視圖中,並選擇結果將發佈。MVC3提交兩個模型視圖與dropdownlistfor從數據庫

的問題是我使用鑑於兩款車型我想更多的選擇

我迷路了這一點,我不知道如何將它張貼。數據顯示在列表框中沒有問題。當我嘗試後我得到這個錯誤:

「有型無ViewData的項目‘的IEnumerable’是 有鑰匙‘Item2.idcity’」 System.Exception的 {System.InvalidOperationException}

CityModel

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

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

HospitalModel

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(); 
} 

View.Create

@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) 

回答

0

您無法強制將視圖鍵入多個模型。您需要創建一個視圖模型,它將只是一個包含其他兩個類的複合類,並強制將視圖鍵入該視圖模型。

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

那麼強烈鍵入您的視圖的視圖模型

@ model Full.Path.To.CreateViewModel 

和訪問模型的屬性適當

Model.CityModel.cityName //etcetera... 

與後法將它綁定

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

視圖中的模型類型應與發佈操作中的模型類型相匹配。因此,它應該是一個Tuple(雖然我個人不會使用它)或具有兩個屬性的新模型類型(一個用於城市,一個用於醫院)

相關問題