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

时间:2015-12-01 02:39:50

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

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

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

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

应该像Situation1.aspx, Situation2.aspx, Situation3.aspx。请问有人可以举例说明吗?

1 个答案:

答案 0 :(得分:2)

你正在进行的想法很糟糕。这有以下几个原因:

  • 您如何将新页面纳入源代码控制(

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

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

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

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

[]

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

void Application_Start(object sender, EventArgs e) 
{
    RegisterRoutes(RouteTable.Routes);
}

void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("", "Situation/{situationId}", "~/Situation.aspx");
}

用户随后访问protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { var id = Page.RouteData.Values["situationId"]; var situation = Database.GetSituationById(id); ShowSituationOnPage(situation); } } ,页面可以检索正确的情况并为其显示。

在MSDN上查看How to Define Routes For Web Forms ApplicationsHow to Access URL Parameters on a routed page