4

假设我有一个类“位置”,并且我正在使用 MVC3 创建一个脚手架列表(index.cshtml)。index html 页面使用@model IEnumerable。如果我想在列表中添加一个新位置,我按下创建,最后我会使用@model Project.Models.Location 得到一个新的 html 页面。

我不想进入新页面,而是希望使用 boostrap(twitter) 中的模式将创建页面作为弹出窗口。我试过使用 partialview 没有任何运气。无论我做什么,我都会收到字典错误消息。

传入字典的模型项的类型为“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

您可以创建一个具有两个属性的视图模型:

  • 父视图的 IEnumerable
  • 模态的奇异对象

然后将两个视图都强输入到视图模型中,你应该已经准备好了。

编辑

视图模型:

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(单项)。成功保存单个项目后,您需要更新原始列表视图。您可以使用 jQuery 通过将新项目插入 DOM 来执行此操作,或者只需通过导航到为您提供列表开始的操作来刷新页面。

于 2012-08-13T17:56:00.057 回答