【问题标题】:Static layout, but content is derived from different files静态布局,但内容来自不同的文件
【发布时间】:2013-12-25 04:21:46
【问题描述】:

在我的网站中,我有(为了示例)3 个 div。 布局始终保持不变,但每个 div 的内容每次都来自不同的文件。

如下图所示:(每个小方块都是不同的文件)

所以,在我的第一个 div 中,可能有以下三个文件之一:red.html、yellow.html 和 green.html。

对其余的 div 依此类推。

如何创建此布局,而不必为所有可能的组合复制整个代码?

尝试失败: 我尝试使用母版页,但在母版页中,某些内容始终保持静态。 在我的示例中,页面上的所有内容都会发生变化,与其他 div 无关。

我怎样才能创建一个我可以说的布局:

for div1 use yellow.html
for div2 use orange.html
and for div 3 use grey.html

如果我无法完全解释自己,请发表评论,我会编辑帖子。

我在这里真的很挣扎:\

谢谢大家!

编辑:

我将添加使用母版页的示例代码来说明我的问题

这是我的母版页。它有 2 个 div。一个向左浮动,一个向右浮动。

<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div style="width:50%;float:left;">
        <asp:ContentPlaceHolder id="CPHL" runat="server">
        </asp:ContentPlaceHolder>
    </div>
        <div style="width:50%;float:right;">
        <asp:ContentPlaceHolder id="CPHR" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

这是左侧的网络表单:

<%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>


<asp:Content ID="Content2" ContentPlaceHolderID="CPHL" Runat="Server">
    This is the left side
</asp:Content>

如果我右侧有一个网络表单:

<%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="_Default2" %>


<asp:Content ID="Content2" ContentPlaceHolderID="CPHR" Runat="Server">
    This is the Right side
</asp:Content>

如果我打开第一个文件,我只会看到左侧,如果我打开第二个文件,我只会看到右侧。

显然,这不是要走的路。

我可以改为创建一个自动显示左侧的嵌套母版页,然后让第二个文件(显示右侧)使用母版页显示两侧,但是我将无法更改左侧无需创建新的母版页。

我正在寻找的解决方案是这样的:

<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div style="width:50%;float:left;">
            <asp:ContentPlaceHolder id="CPHL" runat="server">
here I decide which file I want to include

        </asp:ContentPlaceHolder>
    </div>
        <div style="width:50%;float:right;">
        <asp:ContentPlaceHolder id="CPHR" runat="server">
here I decide which file I want to include

        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

所以这是一种自上而下而不是自下而上的策略。

所以我可以在主文件中说: 左侧包括 anyfile_no312.html

并在右侧包含 anyfile_no_839.html

我将能够独立更改单独 div 的内容。

在经典的 asp 中,我可以有这样的文件:

<div id="container">

        <!--#include file="header.asp"-->

        <div id="main">
                <!--#include file="Story.asp"-->
            <div id="sidebar">
                <!--#include file="quicklinks.asp"-->
                <!--#include file="Menu2.asp"-->
            </div>
        </div>
        <div id="footer">
            <!--#include file="footer.asp"-->
        </div>

在这种情况下,我可以专门为某个页面添加更多菜单,或者从某个页面中删除页脚等等。它让我可以轻松地编辑页面内容,而无需创造大量可能性。

如何将这个经典的 asp 示例翻译成 asp.net 工作代码?

【问题讨论】:

    标签: asp.net webforms master-pages


    【解决方案1】:

    在用户控件中包装您的颜色编码文件并使用内容占位符:

    母版页:

    <asp:ContentPlaceHolder id="Div1" runat="server">
        <p>Some optional default content</p>
    </asp:ContentPlaceHolder>
    

    ASPX 页面:

    <asp:Content ContentPlaceHolderId="Div1" runat="server">
        <MyPrefix:MyControl runat="server" />
    </asp:Content>
    

    进一步解释:

    您将拥有一个包含三个内容占位符的母版页:

    <asp:ContentPlaceHolder id="Div1" runat="server"></asp:ContentPlaceHolder>
    
    <asp:ContentPlaceHolder id="Div2" runat="server"></asp:ContentPlaceHolder>
    
    <asp:ContentPlaceHolder id="Div3" runat="server"></asp:ContentPlaceHolder>
    

    然后,您将拥有每种颜色的用户控件。现在,假设您想要红色、橙色和紫色。创建一个如下所示的页面:

    <asp:Content ContentPlaceHolderId="Div1" runat="server">
        <Colours:Red runat="server" />
    </asp:Content>
    
    <asp:Content ContentPlaceHolderId="Div2" runat="server">
        <Colours:Orange runat="server" />
    </asp:Content>
    
    <asp:Content ContentPlaceHolderId="Div3" runat="server">
        <Colours:Purple runat="server" />
    </asp:Content>
    

    您可以像上面那样创建具有您需要的任何“颜色”组合的页面。

    【讨论】:

    • 我正在使用网络表单。您知道也适用于网络表单的解决方案吗?
    • 我的错误 - 以为你提到了 MVC。我已经用 WebForms 解决方案更新了我的答案。
    • 我知道如何在母版页中每次都能够动态更改一个文件,但是如何从一页中设置所有三个文件?
    • 不会有三个内容占位符来实现这一点吗?如果没有,我想我错过了一些东西。
    • 我编辑了帖子,如果我的问题对你来说更清楚,请告诉我。
    猜你喜欢
    • 2013-06-24
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多