Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET(Web表单)中添加标题后缀?_C#_Asp.net_Title - Fatal编程技术网

C# 如何在ASP.NET(Web表单)中添加标题后缀?

C# 如何在ASP.NET(Web表单)中添加标题后缀?,c#,asp.net,title,C#,Asp.net,Title,我试图在所有页面标题中添加一个title suffix=eg“-MySite”,但我想在中心位置添加它,而不是在每个页面上手动添加。我如何才能做到这一点,就好像你有head runat=“server”你几乎完全失去了对如何渲染的控制 当前,标题在页面指令中设置(元素设置为runat=“server”)。考虑使用将通用布局合并到单个位置 否则,如果标题是在@Page指令中设置的,那么您可能只需一点代码就可以影响整个站点。基本上,您希望创建一个继承自页面的类,然后让所有页面类继承自新的自定义类。(

我试图在所有页面标题中添加一个title suffix=eg“-MySite”,但我想在中心位置添加它,而不是在每个页面上手动添加。我如何才能做到这一点,就好像你有head runat=“server”你几乎完全失去了对如何渲染的控制

当前,标题在页面指令中设置(元素设置为runat=“server”)。

考虑使用将通用布局合并到单个位置

否则,如果标题是在
@Page
指令中设置的,那么您可能只需一点代码就可以影响整个站点。基本上,您希望创建一个继承自
页面
,然后让所有页面类继承自新的自定义类。(是的,你想避免在很多地方做出改变。但由于这种情况已经存在于许多地方,这是一种必然的结果。)

然后可以在类中重写。可能更合适的做法是,重写一个可以设置标题的页面事件。比如:

public class MyBasePage : System.Web.UI.Page
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        this.Title = this.Title + " - MySite";
    }
}

这样,当页面加载时,从此类继承的任何页面都将执行此
OnLoad
方法。

如果希望避免每次加载时重命名的过载,并希望在Visual Studio中硬编码后缀:

  • 按CTRL+SHIFT+H打开查找和替换对话框
  • 要进行搜索,请使用表达式
    (可通过自定义页面适配器完成。不需要母版页或编辑所有页面文件:

    将适配器类添加到web项目:

    using System;
    using System.Web.UI.Adapters;
    
    namespace SampleWebApplication
    {
        public class PageTitleAdapter : PageAdapter
        {
            protected override void OnPreRender(EventArgs e)
            {
                base.OnPreRender(e);
    
                if (this.Page.Title != null)
                {
                   this.Page.Title = "Somesite - " + this.Page.Title;
                }
            }
        }
    }
    
    右键单击ASP.NET Project/Add/Add ASP.NET文件夹,选择应用程序浏览器

    将名为BrowserFile.Browser的/新浏览器文件添加到该文件夹

    编辑文件以指定适配器类:

    <browsers>
        <browser refID="Default">
            <controlAdapters>
                <adapter
                  controlType="System.Web.UI.Page"
                  adapterType="SampleWebApplication.PageTitleAdapter">
                </adapter>
            </controlAdapters>
        </browser>
    </browsers>
    

    由于这是一个ASP.NET网站,您可以在项目中创建一个类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace Nickspace {
    
      public class Tools {
        public static string SetTitle(string title) {
          return title + " - MySite";
        }
      }
    
    }
    
    这非常粗糙,但是您可以在ASP.NET页面中使用内联代码:

    <%@ Language=C# %>
    <html>
      <head><title><%=Nickspace.Tools.SetTitle("Page1") %></title></head>
      <body>
        Blah-Blah-Blah
        <br/>
        This would be easier if I had a Master Page file.
      </body>
    </html>
    
    
    废话废话
    
    如果我有一个母版页文件,这将更容易。

    这段代码当然是未经测试的。

    我实现这一点的方法是让我的所有页面从基类继承。在基类中,我重写OnPreLoad事件并设置页面标题。这给了我更多的控制,并允许我动态更改页面。因此,在配置文件中,我设置了默认页面标题“我的站点”然后在每个页面的代码隐藏页面中,我用活动页面标题覆盖OnPreInit

    Web.Config

    <configuration>
      <appSettings>
            <add key="defaultWebPageTitle" value="My Site"/>
      </appSettings>
    </configuration>
    
    随机融资页面

    public partial class Financing : BaseWebForm
    {
        protected override void OnPreInit(EventArgs e)
        {
            ActivePageTitle = "Financing";
        }
    }
    

    是否使用母版页?或者在Visual Studio中更改所有页面指令标题(CTRL+SHIFT+H,然后使用正则表达式搜索和替换),否则您将不得不求助于Javascript攻击,这被认为是一种拙劣的做法。您也可以在母版页的页面加载事件中更改标题,但这将导致过载,您确实不需要解决您可以处理的问题。不,我使用的是标准Web表单。@Renan-您不能使用Javascript更改页面。@t这是因为它只会在客户端更改它(即爬虫程序不会看到它)。它不是母版页网站,如果它有几百页,将非母版页网站更改为使用母版页将是数周的工作。抱歉!必须承认,一旦我看到第一行,我就认为你文章的其余部分与使用母版页有关:)@公平地说,母版页是实现这一点的“正确”方式。我意识到转换到这种模式需要付出努力,但如果这些挑战继续下去,那么这听起来像是付出了很多努力。这是一个我从ASP.NET 1.0 beta版开始开发的网站,已经有十年的历史了!aspx页面和遗留代码的数量之多使得任何升级都非常不切实际:(从根本上说,客户不想付钱给我们。我现在创建的所有新页面都基于母版页,但我得出的结论是,将旧页面升级到母版页并不是对客户资金的最佳利用。@NickG:一个非常公平的结论,只要成本/收益分析中的数字相匹配。升级f或者升级听起来总是很有趣(开发人员讨厌遗留代码,喜欢重新编写东西),但正如您所说,该值必须是可证明的。太棒了-这正是我想要的。非常感谢!实际上,尝试过它后,它似乎并不总是有效。如果标题是以编程方式设置的,则此代码似乎运行得太早,无法生效。我尝试过将其移动到OnLoad,但仍然不起作用:(Aha-将其更改为OnPreRender()有效:)我已经相应地编辑了答案…似乎也需要一个空检查,因为事件似乎触发了两次-一次是在页面上。标题为空,第二次是在设置的位置。这对较小的解决方案有效,但我使用@PashaPash的解决方案,因为它不涉及编辑我的101个aspx文件:)不过,重命名页面并不是一个真正的“过载”问题。在一个快速而肮脏的测试中,似乎你可以在页面加载时间没有明显变化的情况下,在每个页面视图中重命名10000次。试试看:)@NickG-true和+1到你的评论。
    public partial class Financing : BaseWebForm
    {
        protected override void OnPreInit(EventArgs e)
        {
            ActivePageTitle = "Financing";
        }
    }