7

まず、私は MVC と ASP.NET の初心者なので、単純なものが欠けていたら申し訳ありません。

私はコードファーストの MVC 5 アプリケーションに取り組んでいます。簡潔にするために、次のように定義された 2 つのモデルがあるとしましょう。

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-controlBootstrap が必要とするクラスがありません。

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()ですか?

前もって感謝します。

4

2 に答える 2

5

Bootstrap 2.x を 3.0 または 3.0.1 にアップグレードしてください。Microsoft プロジェクト テンプレートは、3.x ではなく Bootstrap 2.x に基づいています。他の人がGitHubに出くわしたことについて読むことができます 。

また、www.asp.net でいくつかのチュートリアルを書いた Microsoft の Rick Anderson から返信があり、彼はこれを確認しました...

大漁。実際、私のチュートリアルの画像の一部は、V3 ではなくブートストラップ v2 を使用しているベータ版と RC のものであるため、画像は異なります。アカウントコントローラーのビューを見て、「フォームコントロール」を確認してください。私の完全なプロジェクトをダウンロードして、あなたのプロジェクトと比較することができます。

他の質問については、同じ問題に遭遇し、バグである可能性があると思います。特定の注釈が無視されるようです。[ForeignKey()] 注釈を Platform.ManufacturerId に追加して、フィールド ラベルに影響するかどうかを確認してください。

于 2013-11-07T04:22:16.943 に答える