2013-03-11 41 views
0

我試圖讓一個mailto鏈接顯示人名而不是實際的電子郵件地址。MVC3剃刀輔助方法顯示電子郵件地址與mailto傳遞變量

在我details.cshtml文件我已經在網頁強類型的我的供應商

@model TheWorkshop.Web.Models.Supplier 

不過雖然我可以用

@Html.DisplayFor(model => model.Email) 

顯示與文本值的mailto一個mailto鏈接一樣的例如

< A HREF = 「電子郵件地址:[email protected]」> [email protected] </A>

我想是顯示人的名字來代替。所以狩獵約我決定以後儘量讓一個輔助方法

public static MvcHtmlString PrettyEmailAddress(this HtmlHelper htmlHelper, 
               string email, string name) 
{ 
    var mailToLink = new TagBuilder("a"); 
    mailToLink.Attributes.Add("mailto", email); 
    mailToLink.SetInnerText(name); 

    return MvcHtmlString.Create(mailToLink.ToString()); 
} 

但麻煩的是,當我嘗試調用它像這樣綁定:

@Html.PrettyEmailAddress(@model.Email, @model.Name)) 

我得到一個編譯錯誤

CS0103:名稱 '模式' 不在當前情況下存在

如果我傳遞的是字符串而不是@model.Email和'@ model.Name`,那麼這個幫助器可以正常工作,但是如何將變量傳遞給幫助器呢?

+0

嘗試這樣'@ Html.PrettyEmailAddress(Model.Email,Model.Name)' – 2013-03-12 02:38:40

回答

1

嘗試調用你的助手這樣的:

@Html.PrettyEmailAddress(Model.Email, Model.Name) 

事情需要注意:

  • 資本M
  • 沒有必要使用@,因爲你已經在服務器上

另外你可能想替換:

mailToLink.Attributes.Add("mailto", email); 

與:

mailToLink.Attributes.Add("href", string.Format("mailto: {0}", email)); 

以實現期望的結果。

0

試試這個:

<a href="mailto:@Model.Email">@Html.ValueFor(model=>model.Email)</a>