Как создать полный почтовый якорь в asp.NET

У меня есть буквальный тег, которому передается список строк. одна из строк, которую я хочу передать, это электронное письмо... я хотел бы, чтобы электронное письмо было гиперссылкой. это то, что у меня так далеко,

tenancyManager.UserEmail = "a@b.c";
if (null != tenancyManager.UserEmail)
{
    var emailAnchor = "<a href="+"mailto:"+tenancyManager.UserEmail+">"+ "</a>";
    builder.Append(emailAnchor);
    builder.Append("<br />");
}

кажется, это не работает, кто-нибудь может помочь с моим синтаксисом? я тоже пробовал

var email = string.Format("<a href={0}{1} Text={2}> </a>", "mailto:", tenancyManager.UserEmail, tenancyManager.UserEmail);

3 ответа

Решение

Ваш string.Format() код неверный. Пытаться:

var email = string.Format("<a href='mailto:{0}'>{0}</a>", tenancyManager.UserEmail);

Это будет делать то, что вы хотите:

StringWriter stringWriter = new StringWriter();
using (HtmlTextWriter tag = new HtmlTextWriter(stringWriter))
{
    tag.AddAttribute(HtmlTextWriterAttribute.Href, string.Format("mailto:{0}", tenancyManager.UserEmail));
    tag.RenderBeginTag(HtmlTextWriterTag.A);
    tag.Write(tenancyManager.UserEmail);
    tag.RenderEndTag();

}
literal.Text = stringWriter.ToString();

Хотя я не уверен, почему вы не просто используете <asp:Hyperlink>? Вот так:

<asp:HyperLink id="hypEmail" runat="server" />
hypEmail.NavigateUrl = string.Format("mailto:{0}", tenancyManager.UserEmail);
hypEmail.Text = string.Format("mailto:{0}", tenancyManager.UserEmail);

Ваша строка формата неверна: тег html не имеет текстового атрибута.

string.Format("<a href=\"mailto:{0}\">{0}</a>", tenancyManager.UserEmail);

(не имеет смысла использовать string.format с 2 разными заполнителями для одного и того же текста)

Во всяком случае, я думаю, что это более чистый, чтобы использовать asp:HyperLink http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hyperlink.aspx instead of a literal.

hl.NavigateUrl = string.Format("mailto:{0}", tenancyManager.UserEmail);
hl.Text = tenancyManager.UserEmail;

Or if you want to have full html output control use the GenericHtmlControl http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlgenericcontrol.aspx or the HtmlAnchor http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlanchor.aspx

IMHO Use Literal control to inject html is a bad practice

Другие вопросы по тегам