【发布时间】:2013-02-01 20:56:23
【问题描述】:
我正在使用@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; }
}
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.EditorFor(),您将遇到将VehicleMake 属性与下拉选择绑定的问题,因为它是值将由EditorFor()重新定义的文本框确定 -
用最简单的解决方案编辑了我的答案
标签: asp.net asp.net-mvc asp.net-mvc-4 html-select