如何在剃刀视图中将@model指令更改为其他模型?

mon*_*tro 7 c# model razor asp.net-mvc-3

我有一个控制器,它创建一个模型并调用一个视图传递模型作为参数.在View中有一个@model指令,用于指定Model的类型.我想重用相同的View,但是从控制器传递不同的模型.是否可以在View中动态(或有条件地)更改@model指令?

例如,在我的控制器操作中:

var contactsModel = db.GetContacts();
var companiesModel = db.GetCompanies();
return (someCondition)? View(contactsModel):View(companiesModel);
Run Code Online (Sandbox Code Playgroud)

那么如何在View指令中定义@model以满足两个模型?我希望相同的视图根据传递的模型类型呈现信息.

谢谢.


更新:

谢谢,但我需要使用一个只有不同模型的常见视图.

这是可能的,这是如何做到的.

在视图中我定义:

@model IEnumerable<MvcApplication1.Models.IBaseInterface>
Run Code Online (Sandbox Code Playgroud)

在Model类中我定义:

public interface IBaseInterface { }

public class Contact: IBaseInterface {}

public class Company: IBaseInterface {}
Run Code Online (Sandbox Code Playgroud)

然后,在视图中我使用:

@if (Model is List<Contact>) {
    @foreach (var item in (List<Contact>)Model)
        { // Here item has type Contact }
}

@if (Model is List<Company>) {
    @foreach (var item in (List<Company>)Model)
        { // Here item has type Company }
}
Run Code Online (Sandbox Code Playgroud)

完美的工作:)

Dar*_*rov 4

是否可以动态(或有条件)更改视图中的 @model 指令?

不。

如果您需要传递不同的模型,这意味着您需要不同的视图:

return (someCondition) 
    ? View("Contacts", contactsModel) 
    : View("Companies", companiesModel);\
Run Code Online (Sandbox Code Playgroud)

ASP.NET MVC 中的基本规则如下:a view model per view.