0

ビューのドロップダウンリストに表示されるデータベースからリストをクエリしようとしています。選択した結果は投稿されます。

問題は、ビューで 2 つのモデルを使用していることです。さらに多くのオプションを試しました。

私はこれで迷っています、投稿する方法がわかりません。データは問題なくリストボックスに表示されます。投稿しようとすると、次のエラーが表示されます。

「キー 'Item2.idcity' を持つタイプ 'IEnumerable' の ViewData アイテムはありません。」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; }
}

HospitalController.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)
4

2 に答える 2

0

ビューのモデル タイプは、ポスト アクションのモデル タイプと一致する必要があります。したがって、それは Tuple (個人的には使用しませんが) または 2 つのプロパティ (都市用と病院用) を持つ新しいモデル タイプである必要があります。

于 2013-01-05T12:34:25.090 に答える
0

ビューを複数のモデルに強く型付けすることはできません。他の 2 つのクラスのそれぞれを含む単純な複合クラスになるビュー モデルを作成し、そのビュー モデルにビューを厳密に型指定する必要があります。

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)
{
  //...
于 2013-01-07T13:43:30.280 に答える