我是一名前端开发人员,对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;
}
组合模型和动态模型的最佳方法是什么,以便我可以在此视图中同时使用它们?
答案 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;