从aspx页面访问应用程序设置并添加连接文本

4
我有一个项目,任务是在一组遗留的C#/VB Web项目中将硬编码的域名引用从一个域名更改为另一个域名。我希望尽可能地将域名参数化,而不仅仅是替换为不同的硬编码值。问题是,在大约30个不同的解决方案中有超过800个这些引用,因此在每个代码后台创建变量绑定会花费很长时间。
我已将新域名添加到web.config文件的appSettings部分中,并且这样可以工作:
<asp:HyperLink Text="Link" NavigateUrl="<%$appSettings:DomainX %>" runat="server" />

但我需要能够做到这样:
<asp:HyperLink Text="Link" NavigateUrl="<%$appSettings:DomainX %>/newPage.aspx" runat="server" />

但是当我添加“/newPage.aspx”时,页面就无法编译了。我不在意这是否是通过asp:HyperLink标签或只是一个a标签完成的。

你有什么想法可以帮我完成这个任务吗?

谢谢。

3个回答

6

我认为你有两个选择。最简单的方法是,如果你没有在服务器端使用HyperLink,只需使用普通的锚标签:

<a href="<%= string.Concat(ConfigurationManager.AppSettings["DomainX"], "/newPage.aspx") %>">Link</a>

另外一种方法是在Page_Load中设置NavigateUrl,因为在HyperLink服务器标记内使用<%=将不能正常工作:

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
        link1.NavigateUrl = string.Concat("http://", 
                  ConfigurationManager.AppSettings["DomainX"], "/newPage.aspx");
}

您还可以尝试制作自定义绑定,例如$myBinding:DomainX,但我不确定这是否可以立即实现(尽管我认为可能性很大)。
编辑
那个$appSettings:DomainX代码被称为ASP.NET表达式,您可以创建自定义表达式。如果您感兴趣,Phil Haack的博客文章介绍了如何设置它们。

谢谢,这个很好用。我想诀窍就是要摆脱asp:HyperLink标记。我甚至能够删除string.Concat以节省一些字符: <a href="<%= Web.Configuration.WebConfigurationManager.AppSettings("DomainX") + "/newPage.aspx" %>">链接</a> (WebConfigurationManager与ConfigurationManager之间的区别是我测试的页面是由VB支持的) - Mike Pennington
@Mike 很高兴这对你有用。如果你喜欢这个答案并想接受它,你可以在左边的分数下面点击复选标记。 - rsbarro

2
如何这样说呢:
<%=ConfigurationManager.AppSettings["DomainX"].ToString() + "/newPage.aspx" %>

1
不需要在已经是字符串的东西上调用.ToString() - Shadow The Spring Wizard

0

我会选择其中的两种不同方法,这可以避免您需要更改.aspx文件中的NavigateUrl.

一种选择是继承HyperLink类并覆盖NavigateUrl属性,在getter方法中添加ConfigurationManager.AppSettings ["DomainX"]。有了这个,只需将<asp:HyperLink ...更改为<UC:MyLink ...

第二个选项是在每个页面上添加小函数(可以在一个共享位置中),该函数将迭代所有超链接控件并动态添加域。要查找某种类型的所有控件,您可以使用{{link1:such code}}。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接