Sam*_*Sam 9 asp.net asp.net-mvc html-select asp.net-mvc-4
我正在使用@html.EditorFor在编辑模式下渲染我的模型,并且不会渲染下拉列表.
这是我的ViewModel:
     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; }
  }
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
现在我的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; }
Run Code Online (Sandbox Code Playgroud)
现在这引出了另一个问题(也许我应该在不同的线程中),但实际上我在该视图中有两个下拉菜单.第二个下拉列表中的项目基本上是动态的,它们取决于第一个下拉列表中选择的项目.使用AJAX很容易做到这一点但是MVC让我迷失了.人们通常如何做到这一点?
For*_*Two 10
不幸的是,模板编辑器中没有内置的下拉列表支持.您可以编写自己的编辑器模板,也可以@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" )
Run Code Online (Sandbox Code Playgroud)
        我认为下拉列表的模型应该是:
public List<System.Web.Mvc.SelectListItem> VehicleMakeList {get; set;}
Run Code Online (Sandbox Code Playgroud)
并初始化为:
VehicleMakeList = new List<System.Web.Mvc.SelectListItem>() 
{ 
   new SelectListItem { Value = "1", Text = "Renault" }, 
   new SelectListItem { Value = "2", Text = "Peugeot" } 
};
Run Code Online (Sandbox Code Playgroud)
或者使用数据源:
    VehicleMakeList = db.VehicleMakers /*EF, LINQ2SQL, ADO.NET or any supported external source*/
       .Select(v=> new SelectListItem { Text = v.Name, Value = v.Id})
       .ToList();
Run Code Online (Sandbox Code Playgroud)
视图:
@Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList)
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           55875 次  |  
        
|   最近记录:  |