4

クラス 'Location' があり、MVC3 を使用して足場リスト (index.cshtml) を作成しているとします。index html ページは @model IEnumerable を使用します。リストに新しい場所を追加したい場合は、[作成] をクリックすると、@model Project.Models.Location を使用して新しい html ページが作成されます。

新しいページに移動する代わりに、boostrap(twitter) のモーダルを使用して作成ページをポップアップとして表示したいと思います。私はパーシャルビューを使ってみましたが、運がありませんでした。私が何をしても、辞書のエラーメッセージが表示されます。

ディクショナリに渡されたモデル アイテムのタイプは 'System.Data.Entity.Infrastructure.DbQuery`1[Project.Models.Location]' ですが、このディクショナリにはタイプ 'Project.Models.Location' のモデル アイテムが必要です。

モーダル(ブートストラップ)自体は、部分ビューをフェッチしていないときに機能しています。部分ビュー自体は、生成された create(CRUD) とまったく同じです。

追記:全部書き直しました。

索引:

@model IEnumerable<LoLStats.Models.Location>

@{
    ViewBag.Title = "Index";
}
@foreach (var item in Model) {
    <ul>
        <li>@Html.DisplayFor(modelItem => item.LocationName)</li>
    </ul>
}

<a class="btn" data-toggle="modal" href="#myModal" >Create</a>

<div class="modal hide" id="myModal">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal">×</button>
    <h3>Modal header</h3>
  </div>
  <div class="modal-body">
    <p>@Html.Partial("_createLocation")</p>
  </div>
  <div class="modal-footer">
    <a href="#" class="btn" data-dismiss="modal">Close</a>
    <a href="#" class="btn btn-primary">Save changes</a>
  </div>
</div>

_createLocation:

@model LoLStats.Models.Location

@{ ViewBag.Title = "作成"; }

@using (Html.BeginForm()) { @Html.ValidationSummary(true) 場所

    <div class="editor-label">
        @Html.LabelFor(model => model.LocationName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.LocationName)
        @Html.ValidationMessageFor(model => model.LocationName)
    </div>
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset> }
4

3 に答える 3

4

次の2つのプロパティを持つビューモデルを作成できます。

  • 親ビューのIEnumerable
  • モーダルの特異オブジェクト

次に、両方のビューをビューモデルに強く入力すると、すべて設定されます。

編集

ViewModel:

public class MyViewModel()
{
  public IEnumerable<LoLStats.Models.Location> Locations {get; set;}
  public LoLStats.Models.Location Location {get; set;}
}

索引:

@model myNamespace.MyViewModel
...
@foreach (var item in Model.Locations) {
    <ul>
        <li>@Html.DisplayFor(modelItem => item.Locations.LocationName)</li>
    </ul>
...

_createLocation:

@model myNamespace.MyViewModel
...
<div class="editor-label">
        @Html.LabelFor(model => model.Location.LocationName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Location.LocationName)
        @Html.ValidationMessageFor(model => model.Location.LocationName)
    </div>
...

うまくいけば、それはあなたを動かすのに十分な詳細です

于 2012-08-13T18:11:25.433 に答える
2

インデックス ビューでこれを試してください。

   ... <p>@Html.Partial("_createLocation", Model.FirstOrDefault())</p>

一方、おそらくこれはより理にかなっています:

   ... <p>@Html.Partial("_createLocation", new LoLStats.Models.Location())</p>

それがあなたのために働くことを願っています。

于 2012-08-14T06:29:13.840 に答える
0

ポップアップには、Project.Models.Car(singular item) として定義されたモデルが必要です。1 つのアイテムを正常に保存したら、元のリスト ビューを更新する必要があります。DOM に新しいアイテムを挿入するか、最初にリストを提供したアクションに移動してページを更新するだけで、jQuery を使用してこれを行うことができます。

于 2012-08-13T17:56:00.057 に答える