【问题标题】:Best way to create master page that has menu and links but displays main content from other pages创建具有菜单和链接但显示其他页面主要内容的母版页的最佳方法
【发布时间】:2012-02-16 20:08:40
【问题描述】:

我有一堆要升级到 asp.net 的 asp 页面。我正在尝试找出实现以下目标的好方法:

我基本上不想要一个门户页面,它有一个菜单栏并链接到公司 Intranet 中的其他站点,但不是在单击链接时重定向到另一个站点,而是将页面加载到当前页面中,以便所有其他站点都可以访问链接和菜单栏。我的目标是,当需要创建一个新网站时,开发人员只需为页面添加内容,并添加另一个指向母版页的链接。

什么是实现这一目标的干净方法?最好将所有这些(现在是独立的)Web 应用程序捆绑到一个 asp.net Web 应用程序项目中,还是有一种简单的方法可以在多个 asp.net 项目之间共享母版页?

我是 asp.net 和 web 开发的新手,因此非常感谢任何帮助,谢谢。

【问题讨论】:

  • 这一切都可以在 MasterPage 级别进行处理,也可以在 IsPostBack 条件检查中编写解决方案/修复代码。听起来很简单。。您是否考虑过使用 MasterPages 进行 siteMap

标签: c# asp.net


【解决方案1】:

ASP Master Pages 开头。

不过,如果有可能,我会跳入ASPNET MVC framework 并开始使用Razor Layouts

如果你有时间,我相信跳入 MVC 是值得的,而不是基本的 ASP.NET。 MVC 是 ASP.NET 的扩展,它将使您的生活更轻松。我有一个主剃须刀布局,我在其中定义了我想在整个网站上显示的页面的每个通用细节。

希望这些链接可能会有所帮助。


编辑:为 MVC 3 中的 Razor 布局添加了示例布局。

这是我用于我的项目的示例布局,如果你决定走这条路,它有望让你在使用 MVC 时领先一步。

@using System.Configuration
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <title>@(!String.IsNullOrEmpty(ViewBag.Title) ? ViewBag.Title : ConfigurationManager.AppSettings["ApplicationName"])</title>
    <meta name="description" content="@ViewBag.MetaDescription" />
    <meta name="robots" content="@ViewBag.Robots" />
    <script type="text/javascript" src="@ConfigurationManager.AppSettings["CDN-Scripts-Url"]/modernizr2.custom.01930.js"></script>
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css"
        rel="stylesheet" type="text/css" />
    @* ------------ CSS for Dropdown menu ----------------------
       Can be found in http://lwis.net/free-css-drop-down-menu/
       ---------------------------------------------------------
    *@
    <style type="text/css">
    /* Layout */
    @@import "@ConfigurationManager.AppSettings["CDN-Scripts-Url"]/free-css-drop-down-menu_v1.2/css/dropdown/dropdown.limited.css";
    /* Theme */
    @@import "@ConfigurationManager.AppSettings["CDN-Scripts-Url"]/free-css-drop-down-menu_v1.2/css/dropdown/themes/flickr.com/default.css";
    </style>
    <!--[if lte IE 7]>
    <style type="text/css" media="screen">
    body { behavior:url("@ConfigurationManager.AppSettings["CDN-Scripts-Url"]/free-css-drop-down-menu_v1.2/js/csshover.htc"); }
    </style>
    <![endif]-->
    @* ------------------------------------------------- *@
    <link href="@ConfigurationManager.AppSettings["CDN-Media-Url"]/Fonts/CopystructNormal/font-CopystructNormal.css" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/css/site.css")" rel="stylesheet" type="text/css" />
    @RenderSection("Header", false)
    <!-- Change the UA-XXXXX-X to be your site's ID  -->
    <script type="text/javascript">
        var _gaq = _gaq || [];
        _gaq.push(['_setAccount', '@ConfigurationManager.AppSettings["GoogleAnalyticsKey"]']);
        _gaq.push(['_trackPageview']);
        _gaq.push(['_trackPageLoadTime']);
    </script>
</head>
<body>
    <div class="wrapper">
        <div class="header">
            <nav>
                <div class="page ui-helper-clearfix">
                    <div id="logo">
                        <a href="@Url.Content("~/")">@ConfigurationManager.AppSettings["ApplicationName"]</a>
                    </div>
                    <div id="mainMenu">
                    @RenderSection("MainMenu", false)
                    </div>

                    <div id="accountMenu" style="float:right">
                    @Html.Partial("_AccountMenuPartial")
                    </div>

                </div>
            </nav>
            <div class="banner">
                <div class="page ui-helper-clearfix">
                    @RenderSection("Banner", false)
                </div>
            </div>
        </div>
        <div class="main">
            <div class="page ui-helper-clearfix">
                @RenderBody()
            </div>
        </div>
        <div class="push">
        </div>
    </div>
    <div class="footer">
        <div class="page ui-helper-clearfix">
            Copyright 2012, @ConfigurationManager.AppSettings["CompanyName"]
        </div>
    </div>
    <!--! end of #container -->
    <!-- Javascript at the bottom for fast page loading -->
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
    <!-- Add all scripts here at the bottom of the page to avoid blocking page load.-->
        type="text/javascript"></script>
    <!-- scripts to support client side validation of forms -->
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.8.1/jquery.validate.min.js"></script>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js"></script>
    <script src="@ConfigurationManager.AppSettings["CDN-Scripts-Url"]/topbar/topbar.js?v=1" type="text/javascript"></script>


    @RenderSection("Scripts", false)


    @* Google Analytics Async Script *@
    <script type="text/javascript">
        (function () {
            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
        })();
    </script>
</body>
</html>

对于没有 MVC 经验的人来说,它可能看起来有点复杂。

这里有一些链接启发了这个模板,或者其中使用的工具。

我希望这会有所帮助,而且不会让人不知所措。

【讨论】:

  • 非常感谢模板和链接
【解决方案2】:

使用 frame 或 iframe 是一种从外部来源加载数据的方法。

【讨论】:

    猜你喜欢
    • 2017-06-10
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多