如何将@model指令更改为剃须刀视图中的不同模型?
我有一个控制器创建一个模型并调用一个视图作为参数传递模型。 在视图中有一个@model指令,用于指定模型的类型。 我想重复使用相同的视图,但从控制器传递不同的模型。 是否有可能在视图中动态(或有条件地)更改@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 }
}
完美的作品:)
是否有可能在视图中动态(或有条件地)更改@model指令?
没有。
如果你需要通过不同的模型,这意味着你需要不同的观点:
return (someCondition)
? View("Contacts", contactsModel)
: View("Companies", companiesModel);
ASP.NET MVC中的基本规则如下: a view model per view
。
简单而美观的解决方案是使用视图模型并将视图与视图模型以及控制器操作绑定,您可以将模型转换为视图模型并将其传递到视图。
如果你是动力学迷,而且两种模型的属性是相同的,那么你可以将视图与dynamic
模型联系起来。
上一篇: how to change @model directive to a different model in razor view?
下一篇: Operation is not valid due to the current state of the object. in C#