具有多个模型的 MVC3 视图

Posted

技术标签:

【中文标题】具有多个模型的 MVC3 视图【英文标题】:MVC3 View with multiple models 【发布时间】:2012-11-21 15:17:18 【问题描述】:

我有一个视图模型。此视图包含一个 @html.DropDownList,其值在模型中。如何让我的视图将两种模型用于程序的不同部分?

例如,我有

@model IEnumerable<projectname.mymodel>
@
   ViewBag.Title = "my title"
 
 <!--This should use a different model-->
 <p>@Html.DropDownList(m =>m.name), new set(Model.list, "value", "key"))

如果我有模型 1 和模型 2(连接到数据库) - 都存储在模型文件夹中;和一个大模型类,比如

public class MyViewModel 
   public model1 var1  get; set; 
   public IEnumerable<projectname.Model.model2> var2  get; set; 

我认为这个模型是:

@model ProjectName.Models.Models

如何引用模型 1 或模型 2 中的项目?

【问题讨论】:

【参考方案1】:

只需将一个新类作为模型传递给您的视图,其中包含您需要的所有数据:

public class MyViewModel 
    public SelectList list  get; set; 
    public IEnumerable<projectname.mymodel> Items  get; set; 

另一种方法是在 Viewbag 中传递列表:

Viewbag.list = new SelectList() ...

【讨论】:

Viewmodel 是一个更好的解决方案。不要使用 Viewbag 传递模型。 @jpo 你必须在你的视图中引用这样的模型:@model MyViewModel。然后你可以使用Model.var1Model.var2来访问这两个属性。 这就是我的想法,但是当我尝试这样做时,得到的错误是:传递到字典中的模型项的类型为'System.Collections.Generic.List`1[ProjectName.Models .Model1]',但此字典需要“ProjectName.Models.Model2”类型的模型项。 Model1 和 Model2 是我的新类 Model 中的两个模型 @jpo 那么您的操作作为模型返回的类型与您查看声明为模型类型的类型不匹配。

以上是关于具有多个模型的 MVC3 视图的主要内容,如果未能解决你的问题,请参考以下文章

MVC3 模型到数据库视图

MVC3 Razor - 模型和视图

通过 Ajax Post 使用模型更改更新视图 - MVC3

在 MVC3、C# 中使用视图模型中的新数据更新视图

MVC3 在 1 个视图中显示来自多个实体的信息

在视图中的模型之间导航的 MVC 3 错误