ASP.NET MVC视图内部视图 型号查看注意:

问题描述

我是ASP.NET MVC的新手,我想问一下如何进行“级联”视图(我不知道这是否是正确的术语)。

让我们看看:我有一个观点可以返回汽车品牌,比如说http:// localhost / brand。

如果我去http://localhost/brand/1,则会得到代码1的品牌详细信息

我可以使用每个品牌的模型创建另一个视图,例如http://localhost/modelshttp://localhost/models/2我可以得到模型详细信息

但是我想要去http://localhost/car/1/2并获得该模型的一些细节。但必须是品牌与型号之间的关系

在ASP.NET MVC中,如何在视图内部获取该视图?

预先感谢

解决方法

您需要设置一些局部视图,并在渲染汽车细节时使用它。

什么是局部视图

这是内部视图。一个视图文件中可以有多个部分视图

如何使用?

@Html.Partial("{your view name}","{your model}")

所以回到您的示例:渲染brand的详细信息时,您想显示一些与modelcar相关的信息。

假设:

  • http://localhost/brands/1的视图模型为CarBrandViewModel
  • http://localhost/models/2的视图模型为CarModelViewModel

型号

对于您的car详细信息页面,您需要定义一个CarDetailViewModel

public class CarViewModel
{
    public CarBrandViewModel CarBrand { get; set; }
    public CarModelViewModel CarModel { get; set; }
    /* some other fields for your car */
}

这个CarViewModel将是http://localhost/car/1/2的视图模型。

查看

您需要定义3个视图文件:

  • 汽车详细信息的查看文件,例如CarDetail.cshtml;
  • 部分视图以获取品牌信息,例如Shared\_CarBrandDetail.cshtml;
  • 部分视图以获取模型信息,例如Shared\_CarModelDetail.cshtml

_CarBrandDetail.cshtml文件应接受CarBrandViewModel对象作为模型:

// in your _CarBrandDetail.cshtml...
@model CarBrandViewModel

<!-- your code for rendering brand information ->

_CarModelDetail.cshtml中定义类似的内容。这次您应该设置:

@model CarModelViewModel

现在,在CarDetail.cshtml中:

// in your CarDetail.cshtml...
@model CarViewModel

@* render your brand's details *@
@{
    Html.RenderPartial("_CarBrandDetail",Model.CarBrand);
}

@* render your model's details *@
@{
    Html.RenderPartial("_CarModelDetail",Model.CarModel);
}

<!-- your code for rendering other details of the car -->

注意:

  • 需要一对@{ }来包围Html.RenderPartial();通话。

  • 不必将所有局部视图放在Shared文件夹下。但是,如果将部分视图放在Views下的其他位置,则在调用Html.RenderPartial()时需要更改文件路径。

  • 您可能想重用_CarBrandDetail中的http://localhost/brands/1。在这种情况下,您可以查看brand/{id}页面,然后调用_CarBrandDetail部分视图。