以编程方式复制带有隐藏代码的 .aspx 文件

Copy .aspx file with code behind programmatically

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

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

我可以将一些 class 与 Situation1Situation2 等类型一起使用。但问题是我需要对所有页面使用不同的 URL。我不能只做 Help.aspx?type=situation1, help.aspx?type=situation2.

这样的事情

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

你的想法很糟糕。原因如下:

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

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

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

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

将此添加到您的全局应用程序 class(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,页面可以检索正确的情况并为他们显示。

请参阅 How to Define Routes For Web Forms Applications and How to Access URL Parameters on a routed page,均在 MSDN 上。