我有一个控制器,它创建一个模型并调用一个视图将模型作为参数传递.
在View中有一个@model指令,用于指定Model的类型.
我想重用相同的View,但是从控制器传递不同的模型.
是否可以在View中动态(或有条件地)更改@model指令?
在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 } }
完美的工作:)
解决方法
Is it possible to dynamically (or conditionally) change @model
directive in the View?
没有.
如果您需要传递不同的模型,这意味着您需要不同的视图:
return (someCondition) ? View("Contacts",contactsModel) : View("Companies",companiesModel);\
ASP.NET MVC中的基本规则如下:每个视图的视图模型.