创建具有更多局部视图和不同模型的视图

时间:2015-08-29 12:53:06

标签: asp.net-mvc partial-views

我希望有一个与Tab jQuery一起使用的视图,允许我填充多个表(使用局部视图)。基本上我希望能够用一个视图填充数据库的表。

我的模特示例:

public class Tag
{
    public int Id { get; set; }
    public string Tag { get; set; }
    public string Note { get; set; }
}

public class City
{
    public int Id { get; set; }
    public string City { get; set; }
    public string Note { get; set; }
}

我的控制员:

public class tabController : Controller
{
    public ActionResult tab()
    {
        var tvm = new MyDbContext();
        return View(tvm);
    }
}

和我的观点:

@model ??????????

@section Scripts {
    <script>
        $(function () {
            $("#tabs").tabs();
        });
   </script>
}

<div id="tabs">
    <ul>
        <li><a href="#tabs-1">tag</a></li>
        <li><a href="#tabs-2">city</a></li>
        <li><a href="#tabs-3">country</a></li>
        <li><a href="#tabs-4">more more</a></li>
    </ul>
    <div id="tabs-1">
        <div class="panel-body">
            @Html.Partial("_tag", ????? )
        </div>
    </div>
    <div id="tabs-2">
        <div class="panel-body">
            @Html.Partial("_city", Model?)

        </div>
    </div>
    <div id="tabs-3">
        <div class="panel-body">
            @Html.Partial("_country", @Model.Country)
        </div>
    </div>
    <div id="tabs-4">
        <div class="panel-body">
            @Html.Partial("_note"@*, @Model.NoteShares*@)
        </div>
    </div>
</div>

我看到了错误:

  

传递到字典中的模型项的类型为'myprojMVC5.Models.tabs',但此字典需要类型为'System.Collections.Generic.IEnumerable`1 [myprojMVC5.Models.tabsl]

1 个答案:

答案 0 :(得分:1)

选项1:查看模型

创建包含要显示的集合的属性的视图模型

public class TabsVM
{
  public IEnumerable<Tag> Tags { get; set; }
  public IEnumerable<City> Cities { get; set; }
}

并在控制器中初始化视图模型的实例并填充te集合

public class tabController : Controller
{
  public ActionResult tab()
  {
    var tvm = new MyDbContext();
    TabsVM model = new TabsVM()
    {
      Tabs = tvm .Tabs(),
      Cities = tvm.Citys()
    }
    return View(model);
}

并在视图中

@model yourAssembly.TabsVM
....
@Html.Partial("_tag", Model.Tags)
....
@Html.Partial("_tag", Model.Cities)

选项2:仅调用返回部分视图的子操作方法

[ChildActionOnly]
public ActionResult FetchTags()
{
  var tvm = new MyDbContext();
  var model = tvm.Tags();
  return PartialView("_tags", model);
}

并在视图中(不需要传递给视图的模型)

....
@Html.Action("FetchTags") // assumes the methods will be in the same controller
....
@Html.Action("FetchCities") // or you can use @{ Html.RenderAction("FetchCities"); }