【问题标题】:passing multiple models to views and partialViews in Asp.net MVC 3将多个模型传递给 Asp.net MVC 3 中的视图和部分视图
【发布时间】:2011-11-03 19:50:02
【问题描述】:

让我解释一下我的问题:

我有四个使用实体框架创建为对象的表。 我在实体模型中添加了一个存储库类来添加/删除/获取/查询我需要的东西。

 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”中找不到的特定类型,例如对象列表等

这真的让我很困惑,我将如何解决这个问题,我确信它可以以某种方式完成,但是正确的方法是什么?提前致谢

【问题讨论】:

  • “我的实体对象返回了在我的“HomeViewModel”中找不到的特定类型,例如对象列表等”这是什么意思?
  • public ActionResult Index() { var topTenList = repository.FindAllTopTen().ToList();返回视图(topTenList); }
  • 我正在返回一个对象列表,但这仅适用于我的一个局部视图,其他局部视图将需要其他数据,我将如何解决这个问题?我不能直接将结果发送到我的部分视图?我猜只有我的主要观点
  • 这不是真的!你可以“返回 PartialView(model);”在你的控制器中
  • 但是我将局部视图作为主视图返回,这意味着只有局部视图可见,我想同时返回所有局部视图,只需返回索引视图

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


【解决方案1】:

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

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 模型正确传递给操作。

【讨论】:

  • 理论上这正是我想做的,但是当我尝试这样做时,你知道整个故事:D 谢谢,我会试一试
  • TopTenFavourites = topTenList
  • 我无法将 topTenList 显式转换为对象,因为它是对象列表,知道如何解决吗?
  • public IEnumerable topTenFav {get;set;} 好的,我更改了模型中的类型,所以现在应该没问题了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多