在MVC4中使用具有动态模型的模型

时间:2013-07-10 13:33:35

标签: asp.net-mvc asp.net-mvc-4 mvcsitemapprovider

我是一名前端开发人员,对MVC 4不是很强,所以如果这是一个非常愚蠢的问题我会道歉。

我正在尝试修改我继承的视图 - 我已经将动态模型复制到已经有模型的页面中 - 我知道你不能声明2个模型,所以我该如何修改下面的?

@model MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models
@using Project.RealTime.LookupService;
@using Project.RealTime.Models;
@model dynamic
@{
    SessionVars session = new SessionVars();
    Account account = null;
    if ((Model != null) && (Model is Account))
    {
        account = (Account)Model;
    }

组合模型和动态模型的最佳方法是什么,以便我可以在此视图中同时使用它们?

4 个答案:

答案 0 :(得分:0)

尝试只留下@model dynamic并删除@model MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModel

但是使用强类型模型有两个单独的视图会更好。因为它可以帮助您在编译时识别一些错误并在视图上进行智能感知。

如果您在我们的视图中需要帐户 - 也许您应该查看您的ViewModel并向其添加帐户。

答案 1 :(得分:0)

由于您在视图中只能有一个模型,因此最好的选择是修改模型,使其包含新dynamic模型中的信息。

您有两个不错的选择:

- 编辑现有的Model类并添加属性

- 或继承现有的模型:

public class MyNamespace.MyNewModel : MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModel
    {
         public string Property1 { get; set; }
         /* .... */
    }

在您的视图中仅引用新的视图模型:

@model MyNamespace.MyNewModel 

答案 2 :(得分:0)

将您想要的动态数据包含在模型中。模型通常不应该是某个数据类,而应该是一个类,它是要在视图中使用的数据的集合。

例如

public class ControllerActionViewModel
{
    public FooClass Foo;
    public dynamic Foo2;
}

然后

@model Project.Models.ControllerActionViewModel

@Model.Foo2.whatever

答案 3 :(得分:0)

最简单的方法是使用ViewBag作为动态部分。 ViewBag是一个动态对象,可在控制器和模板中使用。如果在控制器中添加属性,它将在模板中可用。

在控制器中:

ViewBag.Title="Our house in the middle of a street";

在模板中:

<h1>@Viewbag.Title</h1>

如果您的模型已经可用,只需将其作为ViewBag的属性传递:

ViewBag.SecondModel=myExistingModel;