Asp.net

帶有 DropDownList 數據的 ASP.NET MVC 4 ViewModel

  • January 26, 2017

@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; }

現在這將我引向另一個問題(也許我應該在不同的執行緒中),但實際上我在該視圖中有兩個下拉菜單。第二個下拉列表中的項目基本上是動態的,它們取決於第一個下拉列表中選擇的項目。使用 AJAX 很容易做到這一點,但使用 MVC 我迷路了。人們通常如何做到這一點?

不幸的是,模板編輯器中沒有內置對下拉列表的支持。您可以編寫自己的編輯器模板,也可以@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" )

引用自:https://stackoverflow.com/questions/14654873