2011-10-11 49 views
1

我有我想MVC3服务到客户端页面的网页的部分。而不是让他们在永恒之中保持静态。我有一些网站会在页面的某些部分重新产生标记,例如横幅,导航等。在一些网站中,我需要定制一些标记。所以我需要能够延长如果可能的话。HTML标记和ASP.NET MVC3

有人可以告诉我,如果MVC3是理想的解决方案吗?我正在考虑部分意见。你可以继承&扩展部分视图吗?

感谢

回答

0

局部视图可以为您的需求来实现。例如,您可以按以下方式使用它们:

@model string[] 

    @if((bool)Model[0]) { 

    <span>I like it to be this way.</span> 

    } else { 

     <span>No, I like it to be that way.</span> 
    } 

内部的视图,可以按如下方式调用这个局部视图:

@Html.Partial("myPartialView", new string[] { "true" }) 

你几乎可以通过任何局部视图Model

如果您打算在多个应用程序中使用这些部分视图,我鼓励您为这些部分视图创建Nuget包,并通过Nuget Package Manager将它们放到每个应用程序中。

+0

,所以我想你不能“继承”部分的看法? – River

+0

@ user742276你想使用它们作为模板吗?如果是这样,你要找的是Layouts not Partials。 – tugberk

+0

请问您可以通过使用Layout来说明您的意思吗? – River

0

横幅,导航,自定义面板等 - 所有这些都是随着时间的推移您可能想要添加,组合,删除或更新的组件。是的,部分意见可以轻松完成这项工作,但在我看来,继承并不是一种前进的方式。

您的部分视图应该基于视图模型。例如:OrderPanelViewModel,UserMenuViewModel,CustomPanelViewModel。每个局部视图现在都是一个组件,您可以根据需要添加,删除或修改这些功能。

如果要将横幅和用户菜单组合起来会发生什么?如果它们从相同的视图模型继承,它将无法工作,但如果它们有自己的视图模型,它将起作用。

例如:

public class MyCustomPaneViewModel{ 
    public UserMenuViewModel UserMenu { get; set; } 
    public UserBannerViewModel UserBanner { get; set; } 
} 

您现在可以立足视图这个视图模型

@model YourDll.WebUI.Models.MyCustomPaneViewModel 

@section main_content{ 

    @Html.DisplayFor(model => model.UserMenu, "UserMenu") 
    @Html.DisplayFor(model => model.UserBanner, "UserBanner") 

} 
+0

感谢您的解释但是这种方法仍然让我不得不在MVC3之外存储标记。我希望我可以将标记集成到视图中... – River

+0

在mvc3之外说什么意思?第一个代码片段是你的M-模型,第二个是你的V-view – 2011-10-12 06:54:55

+0

标记必须存在一些地方,所以我现在有他们在XML,XSL文件。使用这个模型,我仍然需要从XML/XSL内容文件中读取它们。我希望能够抽象MVC结构中的内容,因为我更喜欢代码而不是XML/XSL。 – River