如何动态地以编程方式更改网站默认文档

时间:2012-10-25 14:56:23

标签: c# asp.net .net

使用ASP.NET 4.0,IIS 7.5。

我有一个网站引擎,我刚刚实现了一种方法来判断它是否在移动设备上加载而不是加载Controls\MyControl.ascx它加载Mobile\Controls\MyControl.ascx。这适用于我的控件以及我的MasterPage.Master文件。

然而,我无法弄清楚我是如何使用Default.aspx做同样的事情。这需要以编程方式动态完成,因为我需要能够检查它是否是移动版本。我想在全局变量中对pre-init事件做一些事情,但不确定这是否是最佳方式。

注意:我不想在Default.aspx上使用内联代码,只是在我的Mobile标志上显示不同的内容,因为我的方案更进一步,将文件基于客户,这样就可以了意味着对所有不可管理的客户都有一个巨大的Default.aspx。

2 个答案:

答案 0 :(得分:3)

在任何实用意义上都无法动态更改默认文档。

动态写入web.config以加载默认页面的移动版本是非常可怕的,而不是您的问题的真实背景的答案。作为开发人员,如果我甚至建议将其作为加载移动版默认页面的答案,我会觉得不负责任。

我试图帮助您解决问题,而不仅仅是回答标题中的基本问题。众所周知,更改web.config将重新启动您的应用程序,并且不会作为真正的解决方案,因为您无法执行此操作并实现任何类型的性能。

这是处理移动浏览器的最佳选择(恕我直言)。 http://51degrees.codeplex.com/

HTH!

答案 1 :(得分:1)

对于其他任何看过这个问题的人,我找到了一个解决方案,但我不确定是否会实现它,因为我不喜欢在运行时更新web.config文件的想法。使用Microsoft.Web.Administration命名空间,您可以以编程方式更新server.webServer -> defaultDocument部分。这样做允许您将路径更改为default.aspx,它将根据您设置的变量加载。

此链接应提供更多信息:http://blogs.msdn.com/b/saurabh_singh/archive/2007/11/24/accessing-iis-7-0-features-programmatically-from-configuration-file-s-c.aspx

此外,Microsoft.Web.Administration dll在VS中无法直接使用,因此您需要从%windir%\syswow64\inetsrv(64位版本)添加它。