【问题标题】:Copy .aspx file with code behind programmatically以编程方式复制带有代码的 .aspx 文件
【发布时间】:2015-12-01 02:39:49
【问题描述】:

如何以编程方式复制 .aspx 页面及其代码?

我知道如何使用 File.Copy 方法,但这不是我需要的。 我正在做帮助系统。在这个帮助系统中,现在只有两种类型(Situation1Situation2)。我必须创建一些函数来创建Situation3Situation4等等。

我可以使用诸如 Situation1Situation2 等类型的类。但问题是我需要所有页面的不同 URL。我不能只做Help.aspx?type=situation1, help.aspx?type=situation2之类的事情。

应该像Situation1.aspx, Situation2.aspx, Situation3.aspx。有人可以举个例子吗?

【问题讨论】:

    标签: asp.net file webforms copy code-behind


    【解决方案1】:

    你正在推进的想法是一个糟糕的想法。这里有几个原因:

    • 您将如何将新页面纳入源代码控制(您应该使用)?

    • 如果您需要进行影响所有 SituationX.aspx 文件的更改怎么办?您必须访问每个文件并单独修复它们。

    • 如果用户能够以任何方式影响文件的内容,这也可能是一个安全漏洞。

    更好的解决方案是使用路由。用户请求的 URL 不一定必须映射到特定文件。这使开发人员可以更好地控制其 URL 的外观,创建看起来也非常适合搜索引擎优化的 "hackable" URL。告诉某人去,并从 URL 中删除文件扩展名(用户不需要知道或关心)也容易得多。

    将此添加到您的全局应用程序类(global.asax 或 global.asax.cs)

    void Application_Start(object sender, EventArgs e) 
    {
        RegisterRoutes(RouteTable.Routes);
    }
    
    void RegisterRoutes(RouteCollection routes)
    {
        routes.MapPageRoute("", "Situation/{situationId}", "~/Situation.aspx");
    }
    

    有一个名为 Situation.aspx 的 Web 表单。然后,它可以检查 URL 以检索用户请求的情况页面的 ID。它可以从您的数据库中检索有关该特定情况的数据:

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            var id = Page.RouteData.Values["situationId"];
            var situation = Database.GetSituationById(id);
            ShowSituationOnPage(situation);
        }   
    }
    

    然后用户访问example.com/Situations/1,页面可以检索到正确的情况并为他们显示。

    请参阅 MSDN 上的 How to Define Routes For Web Forms ApplicationsHow to Access URL Parameters on a routed page

    【讨论】:

    • 非常感谢您的建议,它会帮助我,但不是在这种情况下...我正在为一个客户做,所以您可能会了解客户的请求)))。无论如何,谢谢。
    • @Khazratbek 是否为客户无关紧要。如果他们告诉您他们希望如何实施,请向他们解释这如何更好。如果他们没有告诉你如何实现它,那就去做吧。这是正确的方法。
    猜你喜欢
    • 1970-01-01
    • 2011-03-23
    • 2018-07-08
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    相关资源
    最近更新 更多