问题描述
我是ASP.NET MVC的新手,我想问一下如何进行“级联”视图(我不知道这是否是正确的术语)。
让我们看看:我有一个观点可以返回汽车品牌,比如说http:// localhost / brand。
如果我去http://localhost/brand/1
,则会得到代码1的品牌详细信息
我可以使用每个品牌的模型创建另一个视图,例如http://localhost/models
和http://localhost/models/2
我可以得到模型详细信息
但是我想要去http://localhost/car/1/2
并获得该模型的一些细节。但必须是品牌与型号之间的关系
在ASP.NET MVC中,如何在视图内部获取该视图?
预先感谢
解决方法
您需要设置一些局部视图,并在渲染汽车细节时使用它。
什么是局部视图?
这是内部视图。一个视图文件中可以有多个部分视图。
如何使用?
@Html.Partial("{your view name}","{your model}")
所以回到您的示例:渲染brand
的详细信息时,您想显示一些与model
和car
相关的信息。
假设:
-
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
部分视图。