如何在MVC中创建子视图?

时间:2009-10-25 07:55:52

标签: asp.net-mvc model-view-controller

我对ASP.NET中的这个MVC很新。如果我有一个具有锦标赛类的页面(在详细模式下),下面有一个PlayRoundHoles类列表,由于复杂的查询,它来自存储过程。

如何在比赛详情视图下显示此列表?我不太明白这个PlayRoundHoles在Controller中的位置以及View?

由于

2 个答案:

答案 0 :(得分:1)

创建一个ViewModel,其中包含此页面的所有必需内容。在这种情况下,ViewModel带有锦标赛和PlayRoundHoles列表

public class MyViewModel
{
    public Tournament MyTournament { get; set; }
    public IList<PlayRoundHoles> MyPlayRoundHoles { get; set; }
}

然后你的行动方法应该返回这种强烈观察的类型。

public class TournamentController
{
    public ActionResult View(int tournamentId)
    {
        var t = //get tournament
        var p = //call sproc (may use the tournament id)

        MyViewModel model = new MyViewModel();
        model.MyTournament = t;
        model.MyPlayRoundHoles = p;

        return View(model);
    }
}

您的视图可能看起来像

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MyViewModel>" %>

//tournament details using Model.MyTournament
//play round holes details using Model.MyPlayRoundHoles

要改进这一点,你可以创建一个PartialView来分隔PlayRoundHoles的显示

<% Html.RenderPartial("MyPlayRoundHoles", Model.MyPlayRoundHoles); %>

答案 1 :(得分:0)

您可以将锦标赛的实例传递给View。然后在View中渲染PlayRoundHoles。

例如,请参阅此处http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx