MVC 5脚手架不为基本EF派生数据发出引导类

时间:2013-11-01 13:19:31

标签: asp.net-mvc asp.net-mvc-5

首先,我是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()进行下拉?

提前谢谢。

2 个答案:

答案 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,看看它是否会影响字段标签。