如何解决在文本中嵌入剃须刀呼叫时寻找更干净的代码
| 我曾经有过这样的事情:We suggest you read our @Html.ActionLink(\"help page\",\"Help\",\"Home\") before
proceeding.
干净整洁。然后我决定我们需要对该应用程序进行国际化。除了将以下字符串存储在资源文件中,我无法找到一种更好的方法来处理上述内容:
We suggest you read our [HelpPage] before proceeding.
然后在视图上我必须做:
@MvcHtmlString.Create(this.Resource(\"Help\").ToString()
.Replace(\"[HelpPage]\",@Html.ActionLink(\"help page\",\"Home\").ToString()
)
)
您还可以使用其他哪些策略来国际化使用Razor?
this.Resource()
是呼叫that4 calls并返回a5ѭ的页面扩展
解决方法
您应该创建一个单独的代码隐藏方法,用实际链接替换任何ѭ6,然后在Razor视图中调用该帮助程序。
这将为您提供一个地方来更改填充链接的代码。
, 我遇到了同样的问题。我没有使用占位符,而是在资源字符串中使用与使用
String.Format()
相同的格式。
使用此示例;我的资源字符串
LogOnText1 | Please enter your user name and password. {0} if you don\'t have an account.
LogOnText1Register | Register
和我的观点(剃刀):
@MvcHtmlString.Create(String.Format(ViewRes.AccountStrings.LogOnText1,Html.ActionLink(ViewRes.AccountStrings.LogOnText1Register,\"Register\")))
我觉得比较干净
, 所以这就是我最后写的:
public static class PageExtensions
{
public static MvcHtmlString Resource(
this WebViewPage page,string key,Dictionary<string,MvcHtmlString> tokenMap
) {
HttpContextBase http = page.ViewContext.HttpContext;
string text = (string) http.GetLocalResourceObject(page.VirtualPath,key);
return new TagReplacer(text,tokenMap).ToMvcHtmlString();
}
标签替换的完成方式如下:
public class TagReplacer
{
Dictionary<string,MvcHtmlString> tokenmap;
public string Value { get; set; }
public TagReplacer(string text,MvcHtmlString> tokenMap)
{
tokenmap = tokenMap;
Regex re = new Regex(@\"\\[.*?\\]\",RegexOptions.IgnoreCase);
Value = re.Replace(text,new MatchEvaluator(this.Replacer));
}
public string Replacer(Match m)
{
return tokenmap[m.Value.RemoveSet(\"[]\")].ToString();
}
public MvcHtmlString ToMvcHtmlString()
{
return MvcHtmlString.Create(Value);
}
}
所以在我的代码中,我现在可以这样称呼它:
@{
Dictionary<string,MvcHtmlString> tagmap = new Dictionary<string,MvcHtmlString>() {
{ \"HelpPage\",Html.ActionLink(\"help page\",\"Help\",\"Home\") }
};
}
和其他地方:
@this.Resource(\"Help\",tagmap)
任何改进的建议最欢迎
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。