将多个模型传递给Asp.net MVC 3中的视图和partialViews

时间:2011-11-03 11:21:39

标签: asp.net-mvc asp.net-mvc-3 entity-framework

让我解释一下我的问题:

我使用Entity Framework创建了四个作为对象的表。 我已经向实体模型添加了一个存储库类来添加/删除/获取/查询我需要的东西。

 public class YPlaylistRepository
{

    private aspnetdbEntities entities = new aspnetdbEntities();
    //
    // Query Methods
    public IQueryable<Song> FindAllSongs()
    {
        return entities.Songs;
    }

    public IQueryable<TopTenFav> FindAllTopTen()
    {
        return entities.TopTenFavs;
    }

    public IQueryable<Genre> FindAllGenres()
    {
        return entities.Genres;
    }
 }

依旧......

我的索引视图分为一些部分视图,例如:

 @{
ViewBag.Title = "Home Page";
  }

 @Html.Partial("_PartialPlayer")
 <div>

  @Html.Partial("_PartialOtherFav")
 <div id="topTenContainer" style="float: left; width:450px;margin-top:49px;">
 @Html.Partial("_PartialTopTenFav")
 @Html.Partial("_PartialCurrentFav")

假设在我的_PartialOtherView中我有一个表单,我想输入一些信息并将其添加到数据库中:

 @model  yplaylist.Models.TopTenFav

 <div id="otherFavContainer">

 <div id="txtYoutubeLinkContainer">
 @using (Html.BeginForm("AddTopTenFav", "Home", FormMethod.Post, new { id = "AddTopTenFavForm" }))
 {

    <span id="youTubeLinkSpan">Youtube Link</span>
    <div>
        @Html.TextBoxFor(modelItem => modelItem.YoutubeLink, new { id ="youTubeLinkTxt" })
    </div>
    <span id="youTubeNameSpan">Song Title</span>
    <div>
        @Html.TextBoxFor(modelItem => modelItem.Title,new{id="youTubeNameTxt"} )
    </div>

 <button type="submit" name="btnCreateComment" value="">submit</button>
 }

 </div>
 </div>

 </div>

此请求转到控制器:

 public class HomeController : Controller
{
    private YPlaylistRepository repository = new YPlaylistRepository();


    public ActionResult Index()
    {
        var topTenList = repository.FindAllTopTen().ToList();
        return View(topTenList);
    }

    public ActionResult About()
    {
        return View();
    }

    public ActionResult Users()
    {

        return View();
    }

    [HttpPost]
    public ActionResult AddTopTenFav(TopTenFav topTen)
    {

        topTen.Date = DateTime.Now;
        topTen.UserName = User.Identity.Name;
        repository.AddTopTen(topTen);
        repository.Save();
        return RedirectToAction("Index");
    }

}

当我所有的部分视图都处理不同的模型时,我如何解决将正确的模型传递给我的索引视图的问题..我试图创建一个封装我所有模型的类,但这只是进一步创建的问题,因为我的实体对象返回了我的“HomeViewModel”中找不到的特定类型,例如对象列表等等

这真让我感到困惑,我怎么解决这个问题,我相信它可以以某种方式完成,但最新方向是什么?提前谢谢

1 个答案:

答案 0 :(得分:2)

我认为(根据我对问题的理解)你需要的是将视图模型传递给包含任何其他模型的索引视图,例如:

public class IndexModel
{
    public TopTenFav TopTenFavourites { get; set; }

    ...
}

然后在Index()操作中,您将返回视图模型:

public ActionResult Index()
{
    var topTenList = repository.FindAllTopTen().ToList();
    return View(new IndexModel() { TopTenFavourites = topTenList});
}

然后视图会将此模型传递给局部视图/从局部视图传递:

@Html.Partial("_PartialTopTenFav", Model.TopTenFavourites)

在局部视图中提交表单应该调用AddTopTenFav()并正确地将TopTenFav模型传递给操作。