MVC Razor中的mailto链接编码

MVC Razor中的mailto链接编码,razor,asp.net-mvc-5,mailto,Razor,Asp.net Mvc 5,Mailto,我有下面的型号 public class EmailLinkModel { public string mailbody { get; set; } public string emailSubject { get; set; } public string emailto { get; set; } } mailbody包含作为邮件正文一部分的实际文本。此文本包含长文本[包含特殊字符,如?m.mailbody,新的{style=“宽度:100%;高度:

我有下面的型号

public class EmailLinkModel
{
    public string mailbody { get; set; }
    public string emailSubject { get; set; }
    public string emailto { get; set; }        
}
mailbody包含作为邮件正文一部分的实际文本。此文本包含长文本[包含特殊字符,如?<等,并且可以包含换行符、空格等] 我想在部分视图中创建一个mailto html标记,我尝试了3种不同的方法,在某个时候我的mailto链接没有打开默认的邮件客户端 我认为原因是Html或Url ECNOD[我在这里也在文本区域中显示邮件正文内容,以确保值正确无误] 这是我的看法

@model RoyaltyDb.Models.EmailLinkModel
@{
    Layout = null;
}
<div class="row ">
    @{
        var formatted_doc_data = Model.mailbody;
        /*
        var formatted_doc_data =HttpUtility.HtmlEncode(Model.mailbody);
          */

      /*  var formatted_doc_data = Model.mailbody.ToString().Trim().Replace("\n", "%0D%0A");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace(" ", "%20");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace(" ", "%20");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace("%", "%25");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace("?", "%3F");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace("/", "%2F");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace(":", "%3A");*/
    }
    <a class="btn btn-primary center" href="mailto:@Model.emailto?Subject=@Model.emailSubject&body=@formatted_doc_data" target="_top">Send Mail</a>
</div>
<hr/>
<div class="row">
    @Html.TextAreaFor(m => m.mailbody, new { style = "width: 100%; height:200px;margin:5px 5px;" })
</div>
@model RoyaltyDb.Models.EmailLinkModel
@{
布局=空;
}
@{
var格式化的文档数据=Model.mailbody;
/*
var formatted_doc_data=HttpUtility.HtmlEncode(Model.mailbody);
*/
/*var formatted_doc_data=Model.mailbody.ToString().Trim().Replace(“\n”,%0D%0A”);
formatted_doc_data=formatted_doc_data.ToString().Trim().Replace(“,“%20”);
formatted_doc_data=formatted_doc_data.ToString().Trim().Replace(“,“%20”);
formatted_doc_data=formatted_doc_data.ToString().Trim().Replace(“%”,“%25”);
formatted_doc_data=formatted_doc_data.ToString().Trim().Replace(“?”,“%3F”);
格式化的文档数据=格式化的文档数据.ToString().Trim().Replace(“/”,%2F”);
formatted_doc_data=formatted_doc_data.ToString().Trim().Replace(“:”,“%3A”)*/
}

@text区域(m=>m.mailbody,新的{style=“宽度:100%;高度:200px;边距:5px 5px;”)

如何进行正确的编码以创建mailto链接

请尝试
Url.Encode
方法,因为手动编码的代码中可能缺少一些特殊字符

<a class="btn btn-primary center"
   href="mailto:@Model.emailto?Subject=@Model.emailSubject&body=@Url.Encode(Model.body)">Send Mail</a>


另外请注意,
href
属性的长度可能有限制。有关更多详细信息,请参阅。

请尝试
Url.Encode
方法,因为您可能在手动编码的代码中遗漏了一些特殊字符

<a class="btn btn-primary center"
   href="mailto:@Model.emailto?Subject=@Model.emailSubject&body=@Url.Encode(Model.body)">Send Mail</a>


另外请注意,
href
属性的长度可能有限制。有关更多详细信息,请参阅。

如果您计划通过电子邮件发送HTML格式的文档(例如,使用MVC视图作为电子邮件的基础),则创建一个mailto链接,其他电子邮件系统(如Outlook、GMail、Zoho等)将正确呈现和响应该链接可能会很棘手

我是这样做的:在链接中的每个数据段上使用Uri.EscapeDataString。这样,冒号:在mailto之后被保留,而不是编码,&和?人物。当我尝试对整个URL进行转义或编码时,一旦接收电子邮件的系统完成解码,结果就非常糟糕

这可能不是你对你的观点所做的,但我不确定

总而言之,您的链接在视图中的外观如下:

<a href="mailto:@Uri.EscapeDataString(Model.emailto)?Subject=@Uri.EscapeDataString(Model.emailSubject)&body=@Uri.EscapeDataString(Model.body)">Send Mail</a>

如果您计划通过电子邮件发送HTML格式的文档(例如,使用MVC视图作为电子邮件的基础),那么创建一个mailto链接,其他电子邮件系统(如Outlook、GMail、Zoho等)将正确呈现和响应,这可能会很棘手

我是这样做的:在链接中的每个数据段上使用Uri.EscapeDataString。这样,冒号:在mailto之后被保留,而不是编码,&和?人物。当我尝试对整个URL进行转义或编码时,一旦接收电子邮件的系统完成解码,结果就非常糟糕

这可能不是你对你的观点所做的,但我不确定

总而言之,您的链接在视图中的外观如下:

<a href="mailto:@Uri.EscapeDataString(Model.emailto)?Subject=@Uri.EscapeDataString(Model.emailSubject)&body=@Uri.EscapeDataString(Model.body)">Send Mail</a>


你的意思是编码吗?是编码而不是加密
@
应该正确编码字符串,你能显示你得到的输出吗?你可以假设为任何字符串的内容,例如,这个问题的内容。mvc控制器将以字符串的形式返回,因此我必须显示一个mailto链接。你是说编码吗?是编码而不是加密
@
应该正确编码字符串,你能显示你得到的输出吗?你可以假设为任何字符串的内容,例如,这个问题的内容。因此,mvc控制器将以字符串形式返回,在视图中,我必须显示一个mailto链接