【问题标题】:HTML markup & ASP.NET MVC3HTML 标记和 ASP.NET MVC3
【发布时间】:2011-10-11 18:07:32
【问题描述】:

我希望 MVC3 提供给客户端页面的部分网页。而不是让它们在每个站点中都是静态的。我的网站在页面的某些部分有重复出现的标记,例如横幅、导航。在某些站点中,我需要稍微自定义标记。因此,如果可能的话,我需要能够扩展。

有人可以告诉我 MVC3 是否是解决此问题的理想选择吗?我在想片面的看法。你能继承和扩展部分视图吗?

谢谢

【问题讨论】:

    标签: asp.net-mvc-3 inheritance partial-views


    【解决方案1】:

    可以根据您的需要实施部分视图。例如,您可以按如下方式使用它们:

      @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 包管理器将它们放入每个应用程序中。

    【讨论】:

    • 所以我猜你不能“继承”部分视图?
    • @user742276 您想将它们用作模板吗?如果是这样,您正在寻找的是布局而不是部分。
    • 你能用 Layout 来说明你的意思吗?
    【解决方案2】:

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

    您的局部视图应该基于视图模型。例如: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")
    
    }
    

    【讨论】:

    • 感谢您的解释,但这种方法仍然让我不得不将我的标记存储在 MVC3 之外。我希望我可以将标记集成到视图中......
    • 在mvc3之外说什么是什么意思?第一个代码 sn-p 是您的 M 模型,而第二个代码是您的 V 视图
    • 标记必须存在于某个地方,所以我目前将它们保存在 XML、XSL 文件中。使用该模型,我仍然需要从 XML/XSL 内容文件中读取它们。我希望我可以抽象 MVC 结构中的内容,因为我更喜欢代码而不是 XML/XSL。
    猜你喜欢
    • 2023-03-12
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    相关资源
    最近更新 更多