我有一个控制器,用于创建模型并调用将模型作为参数传递的视图。 在View中有一个@model指令,用于指定Model的类型。 我想重用相同的View,但是从控制器传递不同的模型。 是否可以在View中动态(或有条件地)更改@model指令?
例如,在我的控制器操作中:
var contactsModel = db.GetContacts();
var companiesModel = db.GetCompanies();
return (someCondition)? View(contactsModel):View(companiesModel);
那么如何在View指令中定义@model以满足两个模型? 我希望相同的视图根据传递的模型类型呈现信息。
谢谢。
更新
谢谢,但我需要使用一个只有不同模型的常见视图。
有可能,这是如何做到的。
在我定义的视图中:
@model IEnumerable<MvcApplication1.Models.IBaseInterface>
在Model类中我定义:
public interface IBaseInterface { }
public class Contact: IBaseInterface {}
public class Company: IBaseInterface {}
然后,在我使用的视图中:
@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 }
}
完美地工作:)
答案 0 :(得分:4)
是否可以动态(或有条件地)更改@model 视图中的指令?
没有
如果您需要传递不同的模型,这意味着您需要不同的视图:
return (someCondition)
? View("Contacts", contactsModel)
: View("Companies", companiesModel);\
ASP.NET MVC中的基本规则如下:a view model per view
。
答案 1 :(得分:0)
简单而好的解决方案是使用视图模型并将视图绑定到该视图模型,并从控制器操作中将模型转换为视图模型并将其传递给视图。
如果您是动力学的粉丝并且两个模型的属性相同,则另一个选项是您可以将视图绑定到dynamic
模型。