首先,我是 MVC 和 ASP.NET 的新手,如果我遗漏了一些简单的东西,我深表歉意。
我正在开发一个代码优先的 MVC 5 应用程序,为了简洁起见,假设我有两个这样定义的模型:
public class Platform
{
[Key]
public int Id { get; set; }
[Required(ErrorMessage = "You must select a manufacturer")]
[DisplayName("Manufacturer")]
public int ManufacturerId { get; set; }
public virtual Manufacturer Manufacturer { get; set; }
[Required(ErrorMessage="You must enter a name for the platform")]
[StringLength(50, ErrorMessage="Reduce length to 50 characters or less")]
public string Name { get; set; }
}
和
public class Manufacturer
{
[Key]
public int Id { get; set; }
[Required(ErrorMessage="You must enter a name for the manufacturer")]
[StringLength(50, ErrorMessage="Reduce length to 50 characters or less")]
public string Name { get; set; }
public virtual ICollection<Platform> Platforms { get; set; }
}
在为这些模型创建“带有视图的 MVC 5 控制器,使用实体框架”脚手架时,所有 CRUD 操作都正常工作。另一方面,表单元素没有格式化,缺少form-control
Bootstrap 想要的类。
我可以通过添加一个带有类似内容的 EditorTemplate 来解决每种类型的@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "form-control" })
问题,但是 Bootstrap MVC 5 项目的脚手架肯定应该已经发出有效代码了吗?查看各种 MVC 5 教程,它们似乎可以在适当的样式下正常工作,所以我对自己做错了什么感到有些困惑。
作为参考,每个模型的 Create.cshtml 文件中的输出(为了简洁而剪辑到重要的表单元素)是:
<div class="form-group">
@Html.LabelFor(model => model.ManufacturerId, "ManufacturerId", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("ManufacturerId", String.Empty)
@Html.ValidationMessageFor(model => model.ManufacturerId)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</div>
和
<div class="form-group">
@Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</div>
为什么在模型中设置ManufacturerId
a 时将其指定为下拉菜单的标签文本DisplayName
?
为什么下拉使用DropDownList()
而不是强类型DropDownListFor()
?
先感谢您。