0

我正在用 Razor 编写一个 ASP.Net MVC 应用程序。

假设我有 HomeController 和一些视图。

 1. View1
 2. View2
 3. View3

所有这些视图都使用公共_MyLayout文件,它应该如下所示:

单击链接时,将按方法呈现视图RenderBody()。每个视图都是强类型的:它需要自己的模型。

一切都很好,直到我决定将特殊模型添加到 _MyLayout 视图。

但现在我得到错误

The model item passed into the dictionary is of type 'TestUp.Models.UserModels.PendingTestsModel', but this dictionary requires a model item of type 'TestUp.Models.UserModels.UserNavigationModel'.

这是控制器代码

public ActionResult View1()
    {
        ModelForView1 model = new ModelForView1();
        return View(model);
    }
public ActionResult View2()
    {
        ModelForView2 model = new ModelForView2();
        return View(model);
    }
public ActionResult View3()
    {
        ModelForView3 model = new ModelForView3();
        return View(model);
    }

简而言之,如果布局视图不需要模型,则调用视图的特定方法,创建模型,传递给视图,一切正常。但是现在布局也需要模型,所以它崩溃了。

问题是:我如何优雅地解决这个问题?

所需的工作流程是:

  1. 请求 View1
  2. 调用此视图的控制器中的方法,创建模型实例,传递给视图
  3. 调用一些布局方法,创建布局模型,传递给布局。

有没有可能让事情像这样工作?

谢谢。

4

1 回答 1

1

创建一个基本模型类型并让您的特定视图模型扩展它。此基本模型可以具有类型的属性UserNavigationModel。布局可以接受基本模型并将新属性用作导航菜单的模型。

public abstract class ModelBase
{
    public UserNavigationModel NavigationModel { get; set; }
}

public class ModelForView1 : ModelBase { ... }
public class ModelForView2 : ModelBase { ... }
public class ModelForView3 : ModelBase { ... }

视图1:

@model ModelForView1

布局:

@model ModelBase
@* use Model.NavigationModel for nav bar *@

于 2013-01-27T16:38:01.340 回答