使用mailto传递变量显示电子邮件地址的MVC3 razor帮助方法

时间:2013-03-11 21:33:32

标签: asp.net-mvc-3

我正在尝试使用人名而不是实际的电子邮件地址来显示mailto链接。

在我的details.cshtml文件中,我的页面强烈输入了我的供应商

@model TheWorkshop.Web.Models.Supplier

但是我可以使用

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

显示mailto链接,其文本值与mailto相同,例如

  

&LT; a href =“mailto:me@blah.com”&gt; me@blah.com< / A&GT;

我想要的是显示人的名字。所以在打猎之后我决定尝试制作一个Helper方法

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”

如果我传递字符串而不是@model.Email和'@ model.Name`,那么帮助程序工作正常,但如何将变量传递给帮助程序?

2 个答案:

答案 0 :(得分:1)

尝试像这样打电话给你的帮手:

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

需要注意的事项:

  • 资本M
  • 无需使用@,因为您已经在服务器上

你也可能想要取代:

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

使用:

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

为了达到理想的效果。

答案 1 :(得分:0)

试试这个:

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