0

実際のメールアドレスではなく、人の名前で表示するmailtoリンクを取得しようとしています。

私のdetails.cshtmlファイルには、サプライヤーに強くタイプされたページがあります

@model TheWorkshop.Web.Models.Supplier

しかし、私は使用できますが

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

たとえば、mailto と同じテキスト値を持つ mailto リンクを表示するには

< a href="mailto: me@blah.com">me@blah.com</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: 名前 'モデル' は現在のコンテキストに存在しません

and '@model.Name` の代わりに文字列を渡す@model.Emailと、ヘルパーは正常に動作しますが、変数をヘルパーに渡すにはどうすればよいですか?

4

2 に答える 2

1

次のようにヘルパーを呼び出してみてください。

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

注意事項:

  • 資本M
  • @すでにサーバー上にあるため、使用する必要はありません

また、おそらく置き換えたい:

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

と:

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

望ましい結果を達成するために。

于 2013-03-11T21:34:44.233 に答える
0

これを試して:

<a href="mailto:@Model.Email">@Html.ValueFor(model=>model.Email)</a>
于 2014-01-10T22:20:28.803 に答える