Asp.net mvc 3 如何格式化本地化字符串,使句子中的单个单词成为链接?

Asp.net mvc 3 如何格式化本地化字符串,使句子中的单个单词成为链接?,asp.net-mvc-3,internationalization,string-formatting,Asp.net Mvc 3,Internationalization,String Formatting,我正在ASP.NET MVC3中开发一个全球化的web应用程序。该项目包含I18N资源文件,我通常访问Razor视图中的资源,如 @I18N.MyResourceString 我有一个棘手的情况,我还没有想出一个优雅的解决办法。我需要能够本地化的句子“点击这里捐赠。”其中的单词“这里”应该是一个链接到我们的捐赠系统 网站中的大多数链接都是内部链接,所以创建链接我只需写 @Html.ActionLink("Some link text", "MyAction", "MyController")

我正在ASP.NET MVC3中开发一个全球化的web应用程序。该项目包含I18N资源文件,我通常访问Razor视图中的资源,如

@I18N.MyResourceString
我有一个棘手的情况,我还没有想出一个优雅的解决办法。我需要能够本地化的句子“点击这里捐赠。”其中的单词“这里”应该是一个链接到我们的捐赠系统

网站中的大多数链接都是内部链接,所以创建链接我只需写

@Html.ActionLink("Some link text", "MyAction", "MyController")
这个捐赠链接是外部的。到目前为止我所拥有的(不起作用的)是

此外,我还想为“a”标记添加一个“title”属性。当我尝试的时候,它变得更加丑陋

@String.Format(I18N.ClickHereToDonate, "<a href=\"http://paypal.com\" title=\"" + I18N.PayPal + "\">" + I18N.Here + "</a>")
这至少让我在输出的标记中找到了一个可点击的链接

点击捐赠

这仍然是一个远远不够优雅的解决方案,所以我仍然在寻找更好的方法来实现这一点。

也许可以试试

<a href="http://paypal.com" title="@I18N.PayPal">@I18N.ClickHereToDonate</a>

总的来说,您不需要字符串格式,只需将Razor内容注入普通html元素即可

编辑:合并以下内容:

@Html.Raw(String.Format(@I18N.ClickHereToDonate,String.Format("<a href='http://paypal.com' title='{0}'>{1}</a>", I18N.PayPal,I18N.Here)))
@Html.Raw(String.Format(@I18N.ClickHereToDonate,String.Format(“,I18N.PayPal,I18N.Here)))

如果没有对该场景的内置支持,您的选择是有限的(并且帮助程序中没有) 更简洁的方法是在viewmodel中形成URL,并将该视图模型传递给视图,这样您就可以使用最少的html。您的ViewModel包含 公共类WhateverIndexViewModel { 公共字符串密钥{get;set;} 公共字符串URI{get;set;} 公共字符串标题{get;set;} }

在控制器中设置信息,将其传递到视图并使用

<a href="@Html.Raw(Links["YourKey"].URI)">@Links["YourKey"].Title"</a> 作为一个基本理念。
注意:如果您不想在此处使用Html.Raw,那么类中的URI将是MvcString而不是String@Links[“YourKey”]。URI将不会进行Html编码。

他确实需要String.format,因为上面的字符串包含占位符。{0},等等这是我现在不得不求助的方法,但它不是理想的结果。企业只希望“此处”一词成为链接,而不是整个句子。你的答案正是我已经为我的菜单项链接所做的,这些链接都是一个单词或几个单词。我编辑了上面的内容以使用@Html.Raw-Adam在下面使用了它。使用两种String.format应该可以获得所需的结果,而无需更改资源字符串或其他任何内容。
Html.Raw
确实帮助我获得了与我在问题中描述的不同编码的标记。但我不明白你所描述的将如何帮助我将链接嵌入到本地化字符串中。。。
<a href="http://paypal.com" title="@I18N.PayPal">@I18N.ClickHereToDonate</a>
@Html.Raw(String.Format(@I18N.ClickHereToDonate,String.Format("<a href='http://paypal.com' title='{0}'>{1}</a>", I18N.PayPal,I18N.Here)))
<a href="@Html.Raw(Links["YourKey"].URI)">@Links["YourKey"].Title"</a>