-1

我是一名前端开发人员,对 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

4 回答 4

0

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

例如

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

接着

@model Project.Models.ControllerActionViewModel

@Model.Foo2.whatever
于 2013-07-10T13:48:48.980 回答
0

尝试离开@model dynamic并删除@model MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModel.

但最好有两个具有强类型模型的独立视图。因为它可以帮助您在编译时识别一些错误并查看智能感知。

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

于 2013-07-10T13:44:48.617 回答
0

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

在控制器中:

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

在模板中:

<h1>@Viewbag.Title</h1>

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

ViewBag.SecondModel=myExistingModel;

于 2013-07-11T15:14:51.817 回答
0

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

你有两个不错的选择:

- 编辑现有模型类并添加属性

- 或者继承现有的模型:

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

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

@model MyNamespace.MyNewModel 
于 2013-07-10T13:46:37.633 回答