2013-02-05 97 views
0

要在可翻譯文本中設置網址,我們使用{0}作爲佔位符。如何轉義html.actionLink <a></a>標籤爲string.format

所以我們做的事:

@string.Format(@translationHelper.GetTranslation("label-ClickToContinue"), 
    @Html.ActionLink(
     @translationHelper.GetTranslation("text-here"), 
       "Login", 
       new { Model.UserName, Model.UniqueId } 
    ) 
) 

翻譯鍵:

label-ClickToContinue = "Click {0} to continue" 
text-here = "here" 

但這打印逃串入來源:&lt;a href="/Login/Login?UserName=alberttest3&amp;amp;UniqueId=f3647fed-bab4-4575-bb5f-98ed27edff43"&gt;label-RequestNewOfficeWizard&lt;/a&gt;

如何確保它會不顯示html標籤,但網址?

+0

您是否試過@ Html.Raw –

+0

它支持像「{0}」這樣的佔位符嗎? – Highmastdon

回答

0

很容易只是把輸出string.Format()一個Html.Raw()像這裏面:

@Html.Raw(string.Format(@translationHelper.GetTranslation("label-ClickToContinue"), 
     @Html.ActionLink(
      @translationHelper.GetTranslation("text-here"), 
      "Login", 
      new { Model.UserName, Model.UniqueId } 
     ) 
)) 

翻譯鍵:

label-ClickToContinue = "Click {0} to continue" 
text-here = "here" 
0

這不受ActionLink幫助程序的支持。它總是對文本進行HTML編碼。現在

<a href="@Url.Action(Login, new { UserName, Model.UniqueId })"> 
    @Html.Raw(translationHelper.GetTranslation("text-here")) 
</a> 

順便說一句,我已經張貼了這個代碼,它看起來那麼難看:你既可以編寫自己的定製助手不文本或簡單的編碼。來吧,編寫自定義的助手:

public static class HtmlExtensions 
{ 
    public static IHtmlString ActionLinkLocalized(
     this HtmlHelper html, 
     string translationText, 
     string actionName, 
     object routeValues 
    ) 
    { 
     var urlHelper = new UrlHelper(html.ViewContext.RequestContext); 
     var anchor = new TagBuilder("a"); 
     anchor.Attributes["href"] = urlHelper.Action(actionName, routeValues); 
     anchor.InnerHtml = TranslationHelper.GetTranslation(translationText); 
     return new HtmlString(anchor.ToString()); 
    } 
} 

,並在你看來簡單:

@Html.ActionLinkLocalized("text-here", "Login", new { UserName, Model.UniqueId }) 
+0

其次是因爲原因不準。第一個不是很有用,因爲我希望能夠翻譯包含佔位符「{0}」的ClickToContinue文本。沒有更多的選擇了嗎?是不是有某種Html.format()? – Highmastdon

+0

對不起,我在我的答案中犯了一個錯誤。你應該在第一種情況下使用@Html.Raw(translationHelper.GetTranslation(「text-here」))'來避免對輸出進行編碼。此外,爲什麼寫作助手是一個不行?你更喜歡spaghettifying你的意見? –

+0

呃,我現在不能幫助那樣的幫手。我想知道爲什麼MS在使用String.format()時會修改我的字符串。但是由於看起來不可能以預定義的方式來完成,所以我會創建兩個'label-ClickToContinue'字符串(它看起來很難看,但沒有選項) – Highmastdon