【问题标题】:How do I create hyperlinks from resource files?如何从资源文件创建超链接?
【发布时间】:2012-05-04 11:59:48
【问题描述】:

我有一些从资源文件加载的文本。通常,要获取动态内容,我会使用:

string.Format(GetLocalResourceObject("SomeText"), PhoneNumberAsString) 

我想对链接做同样的事情,只有链接需要是应用程序相关的,因为我有像 mysite.com/page.aspxmysite.com/fr/page.aspx 这样的 URL。

我通常使用<asp:HyperLink /> 标签来创建链接,因为我可以在开头添加一个波浪线NavigateUrl="~/page.aspx"。但是,我不知道如何让动态超链接显示为字符串而不将其作为控件添加到某些东西。

只需编写ToString() 即可输出System.Web.UI.WebControls.HyperLink.

如何从资源文件中获取链接并使用 ASP.NET Webforms 将其变为超链接?

更新

在答案的帮助下,我的页面上现在有了以下代码:

<p><%= string.Format(GetGlobalResourceObject("Resource", "MoreThan1000Users").ToString(), ResolveUrl("~/contact-us.aspx")) %></p>

在我的资源文件中我有:

If you would like more than 1000 users please <a href="{0}">call our sales team</a>.

这似乎是一种好的做法,还是有其他方法可以实现我正在做的事情?我不知道我是否应该高兴资源文件中有HTML。

【问题讨论】:

标签: c# asp.net hyperlink


【解决方案1】:

由于您尚未发布代码,我猜您在某个地方有一个 HyperLink WebControl 对象,您正在点击 ToString()。如果是这种情况,您可以使用其 myHyperLinkControl.NavigateUrl 属性访问与其关联的 URL。

如果您使用 squiggle/波浪号(这很好)将链接存储在资源中,那么您可以将 squiggle 替换为您的应用程序位置。如果您有一个控件/页面,那么您可以轻松地调用它的 ResolveURL 方法(它采用波浪号并自动替换它)如果您的上下文没有控件/页面引用,则有一些现有的解决方案,然后有一些讨论在这里做:ResolveUrl without an ASP.NET Page

【讨论】:

  • 你肯定给我找到了解决方案,现在的问题是我在质疑我的做法。请参阅我的更新以获取我的代码。我想我的问题是我是否应该在资源文件中包含链接 HTML。
  • 根据您的编辑,我不确定这是否应该是一个单独的问题。老实说,我有一段时间没有接触过 ASP.NET,所以我不确定处理这个问题的最佳方法,特别是如果您的链接是文本的一部分。也许您可以拥有 3 个单独的资源(before-link-text、contact-us-link-URL、link-text)并且您可以将链接 HTML 放在您的标记中。您可以对通过引用共享的 Contact-Us URL 有多个引用。但也许你最好的办法是把它作为一个新问题,这样更有经验的人可以找到并回答它。
  • 啊,我看到你已经编辑了相当多的问题。希望有一个很好的可靠实践。我知道如果我做到了,我可能会直接使用单独的控件来处理外观/标记,并留下用于填充文本内容或共享 URL 的资源。
  • 哈哈我完全有你提到的那三个资源!然后我觉得它看起来太乱了,所以我把它撕下来,把 HTML 卡在资源中!但是是的,你是对的,这更像是一个资源最佳实践问题,所以我会问一个新问题来回答这个问题,谢谢你的帮助!
【解决方案2】:

我想这就是你想要的:

Server.MapPath("~/page.aspx")

这将在您的 aspx 和您的代码隐藏中工作。

【讨论】:

    猜你喜欢
    • 2019-09-28
    • 2015-11-14
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    相关资源
    最近更新 更多