Доступ к настройке приложения из aspx и добавление объединенного текста - PullRequest
4 голосов
/ 20 мая 2011

У меня есть проект, в котором мне поручено изменять жестко запрограммированные ссылки на домены с одного домена на другой в группе устаревших веб-проектов на C # / VB.Я хочу максимально параметризировать домены, а не просто заменить их другим жестко заданным значением.Проблема состоит в том, что существует более 800 таких ссылок в примерно 30 различных решениях, поэтому создание переменных в каждом выделенном фрагменте кода для привязки займет вечность.

Я добавил новые домены в раздел appSettings разделаФайл web.config, и это работает:

<asp:HyperLink Text="Link" NavigateUrl="<%$appSettings:DomainX %>" runat="server" />

Но мне нужно иметь возможность сделать что-то вроде этого:

<asp:HyperLink Text="Link" NavigateUrl="<%$appSettings:DomainX %>/newPage.aspx" runat="server" />

Но когда я добавлю "/newPage.aspx"страница больше не компилируется.Мне действительно все равно, если это сделать с помощью тега asp: HyperLink или просто тега.

Есть идеи, как мне этого добиться?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 20 мая 2011

Я думаю, у вас есть два варианта. Самое простое - просто использовать простой старый тег привязки, если вы ничего не делаете со стороной сервера HyperLink:

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

В качестве альтернативы, вы можете установить NavigateUrl в Page_Load, так как <% = не будет работать должным образом в теге сервера <code>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 рассказывается, как их настроить, если вам интересно.

2 голосов
/ 20 мая 2011

Как насчет чего-то вроде:

<%=ConfigurationManager.AppSettings["DomainX"].ToString() + "/newPage.aspx" %>
0 голосов
/ 20 мая 2011

Я бы выбрал один из двух разных подходов, которые избавили бы вас от необходимости менять NavigateUrl в самом .aspx.

Один из вариантов - наследовать от класса HyperLink и переопределить свойство NavigateUrl, добавив ConfigurationManager.AppSettings["DomainX"] в метод getter. Имея это, просто измените <asp:HyperLink ... на <UC:MyLink ...

Второй вариант - добавить небольшую функцию на каждую страницу (может быть в одном общем месте и просто вызываться с каждой страницы), которая будет перебирать все элементы управления гиперссылками и динамически добавлять домен. Чтобы найти все элементы управления определенного типа, вы можете использовать такой код , например.

...