首先,我是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控制器时,使用Entity Framework'脚手架,所有CRUD操作都正常工作。另一方面,表单元素未格式化,缺少Bootstrap想要的form-control
类。
我可以通过在其中添加类似@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "form-control" })
的EditorTemplate来解决每种类型的问题,但是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
时,DisplayName
被指定为下拉列表的标签文字?
为什么使用DropDownList()
代替强类型DropDownListFor()
进行下拉?
提前谢谢。
答案 0 :(得分:6)
看起来MVC 5.1将为Bootstrap 3提供表单控制问题的解决方法,如here所述。可以为EditorFor传递样式。
答案 1 :(得分:5)
听起来像你做的那样 - 将Bootstrap 2.x升级到3.0或3.0.1。 Microsoft项目模板基于Bootstrap 2.x而不是3.x.你可以阅读有关其他人的信息 GitHub
我也得到了微软的Rick Anderson的回复,他在www.asp.net上写了几个教程,他证实了这一点......
很棒。实际上,我的教程中的一些图像来自Beta和RC,它们使用的是bootstrap v2,而不是V3,所以我们的图像会有所不同。查看帐户控制器的视图以查看“表单控件”。您可以下载我的完整项目并与您的项目进行比较。
关于你的另一个问题,我遇到了同样的问题并认为这可能是一个错误。某些注释似乎被忽略了。尝试将[ForeignKey()]注释添加到Platform.ManufacturerId,看看它是否会影响字段标签。