2013-07-10 54 views
-1

我是一名前端開發人員,對MVC 4來說不是很強大,所以如果這是一個非常愚蠢的問題,我很抱歉。在MVC4中使用動態模型

我試圖修改一個我已經繼承的視圖 - 我已經將一個動態模型複製到一個已經有模型的頁面中 - 我知道你不能有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; 
    } 

結合模型和動態模型的最佳方法是什麼,所以我可以在這個視圖中使用兩者?

回答

0

試着離開只是@model dynamic和刪除@model MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModel

但是用強類型模型有兩個單獨的視圖會更好。因爲它可以幫助你在編譯時識別一些錯誤並具有智能感知。

如果您需要我們查看的帳戶 - 也許您應該查看您的ViewModel並將帳戶添加到它。

0

由於在視圖中只能有一個模型,所以最好的選擇是修改模型,使其包含新的dynamic模型中的信息。

你有兩個不錯的選擇:

- 編輯現有的模型類,並添加屬性

-Or繼承現有型號:

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

並且在視圖只引用新查看模型:

@model MyNamespace.MyNewModel 
+0

不幸的是,我無法修改'SiteMapNodeModel' - 它是MVCSiteMapProvider的一部分,它是一個NuGet包並被編譯。 –

+0

然後使用我提供的示例代碼。您應該能夠繼承現有模型並以這種方式添加您的屬性。 – Rob

+0

繼承舊模型並添加新屬性可讓您從舊模型和新模型中訪問屬性。 – Rob

0

包含您wan的動態數據進入模型。模型通常不應該是某個數據類,而應該是一個類,它是您的視圖中要使用的數據的集合。

例如

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

然後

@model Project.Models.ControllerActionViewModel 

@Model.Foo2.whatever 
0

做到這一點的最簡單的方法是使用ViewBag爲dyanmic一部分。 ViewBag是一個在控制器和模板中均可用的動態對象。如果您在控制器中添加一個屬性,它將在模板中可用。

在控制器:

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

在模板:

<h1>@Viewbag.Title</h1>

如果該模型已經上市,只是把它作爲ViewBag的屬性:

​​