9

モデルを編集モードでレンダリングするために使用@html.EditorForしていますが、ドロップダウン リストがレンダリングされません。

ここに私のビューモデルがあります:

     public class RiskAutoViewModel
     {
       public RiskAutoViewModel()
       {
         VehicleMakeList = new SelectList(new List<VehicleMake>() { new VehicleMake() { Id = 1, Name = "Renault" }, new VehicleMake() { Id = 2, Name = "Peugeot" } });
       }


    public int NoClaimsDegree { get; set; }

    public int VehicleValue { get; set; }

    public int EngineCapacity { get; set; }

    public int VehicleMake { get; set; }

    public SelectList VehicleMakeList { get; set; }
  }

VehicleMakeテキストボックスとしてレンダリングされ、まったくVehicleMakeListレンダリングされません。私が望むのは、のリストを含むドロップダウンリストをレンダリングし、VehicleMakeその値をのいずれかに設定することですVehicleMake

モデルが保存されると、VehicleMake はリストで選択された項目の値に設定されます。

どうやってやるの ?

編集

以下のコメント ボックスにコードを入力できないので、ここに補足を書きます。

最終的に次のような EditorTemplate を作成しました。

<div class="editor-label">
    @Html.LabelFor(model => model.VehicleMakeList)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList)
    @Html.ValidationMessageFor(model => model.VehicleMake)
</div>

そして今、私のViewModelは次のようになります:

[Required]
[ScaffoldColumn(false)]
public int VehicleMake { get; set; }

[Display(Name = "Marque", Prompt = "Marque", Description = "Renseigne la marque du véhicule")]
public SelectList VehicleMakeList { get; set; }

これは別の質問につながります(おそらく別のスレッドのようにする必要があります)が、実際にはそのビューに2つのドロップダウンがあります。そして、2 番目のドロップダウンの項目は基本的に動的で、最初のドロップダウンで選択された項目に依存します。これは AJAX では簡単に実行できますが、MVC では道に迷ってしまいます。人々は通常どのようにそれをしますか?

4

4 に答える 4

11

残念ながら、テンプレートのエディターにはドロップダウン リストのサポートが組み込まれていません。独自のエディター テンプレートを作成するか@Html.DropDownListFor()、ビューで html ヘルパー メソッドを使用することができます。

この質問に対する Darin Dimitrov の回答では、ドロップダウン リスト用のエディター テンプレートを作成するプロセスを順を追って説明しています。

これを機能させる最も簡単な方法は、ビューでこれを行うことです。

@Html.EditorFor(model => model.NoClaimsDegree)
@Html.EditorFor( model => model.VehicleValue )
@Html.EditorFor( model => model.EngineCapacity )
@Html.DropDownListFor( model => model.VehicleMake, Model.VehicleMakeList, "Select a make" )
于 2013-02-01T21:12:31.293 に答える
10

ドロップダウンリストのモデルは次のようにする必要があると思います:

public List<System.Web.Mvc.SelectListItem> VehicleMakeList {get; set;}

そして次のように初期化されます:

VehicleMakeList = new List<System.Web.Mvc.SelectListItem>() 
{ 
   new SelectListItem { Value = "1", Text = "Renault" }, 
   new SelectListItem { Value = "2", Text = "Peugeot" } 
};

またはデータソースを使用する:

    VehicleMakeList = db.VehicleMakers /*EF, LINQ2SQL, ADO.NET or any supported external source*/
       .Select(v=> new SelectListItem { Text = v.Name, Value = v.Id})
       .ToList();

意見:

@Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList)
于 2013-02-01T21:17:55.637 に答える
3

バインディング ドロップダウンリストは MVC では非常にトリッキーです。コントローラーでこれを行うことができます。すべての都市リストを取得し、viewBag に入れます。

作成

      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name");

編集中の場合は user.CityID 編集時に都市を選択するようにします

      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name", user.CityID);

あなたのビューでこのトリックを行うだけです

     @Html.DropDownList("CityId", "Select")

これは私が知っている最も簡単な方法です....

于 2013-03-20T11:54:23.827 に答える