如何将模型传递给强类型的局部视图

时间:2011-09-11 06:58:07

标签: asp.net-mvc

我有部分视图处理某个模型。 如何从没有关于该模型的引用的视图中将它传递给局部视图?

我的部分观点有:

@model MyNS.Models.NewsComment

我如何致电:

@Html.Partial("CommentForm", Model.NewsComments.SingleOrDefault())  //does not work

2 个答案:

答案 0 :(得分:0)

假设您对模型的视图没有引用它,您可以执行以下操作:

  @{
      var repo = new Models.MyRepo();
      var partialModel = repo.GetAll();
  }

  @Html.Partial("CommentForm", partialModel)

但这完全违反了ASP.NET MVC的Seperation of Concerns理论。

我要做的是将它作为模型传递给视图(如果我不在视图中使用它,则将事件传递给视图)并将其传递给我的视图中的Partial。这样你就可以处理来自控制器的数据访问,这是更好的方法。

<强>更新

我刚刚看到你对错误发表评论。在这种情况下,你会做的是如下更好的方法(我上面展示的第一个案例也适用于此):

按如下方式创建ViewModel:

public class MyViewModel { 

    public MyNS.Models.News News {get; set;}
    public MyNS.Models.NewsComment NewsComment {get; set;}

}

然后按照以下方式传递您的观点:

var viewModel = new MyViewModel();
viewModel.News = repo.GetNews();
viewModel.NewsComment = repo.GetNewsComment();

retun View(viewModel);

然后按照以下方式在您的视图上进行操作:

@Html.Partial("CommentForm", Model.NewsComment)

答案 1 :(得分:0)

根据错误,模型中的NewsComments属性类型为IEnumerable<News>,而它应该是IEnumerable<NewsComment>可能您使用LINQ查询使用错误的select语句填充模型的NewsComments属性。