用于电子邮件目的的CC列表不起作用

时间:2016-10-31 18:35:57

标签: c# asp.net-mvc email

我有一个EmailFormModel课程。

public class EmailFormModel
{
    [Required, Display(Name = "Your Name:")]
    public string FromName { get; set; }

    [Required, Display(Name = "Your Email:")]
    public string FromEmail { get; set; }

    [Required, Display(Name = "To Email:")]
    public string ToEmail { get; set; }

    public List<SelectListItem> CCEmail { get; set; }

    [Required]
    [AllowHtml]
    public string Message { get; set; }

    public EmailFormModel()
    {
        CCEmail = new List<SelectListItem>();
    }

}

现在我需要此电子邮件才能拥有多个CC收件人,因此我将属性CCEmail设为List类型的原因。在我的HttpGet方法中,我填充了正确工作的列表。在我的HttpPost我这样做:

foreach(var item in model.CCEmail)
{
    message.CC.Add(new MailAddress(item.Text));
}

现在,在我的视图中...我该怎么做才能显示这些电子邮件地址..这样当我点击提交时,它们将作为电子邮件地址提交?

目前在我的视图中我有这个:

<div class="form-group">
    @Html.LabelFor(m => m.CCEmail, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.ListBoxFor(m => m.CCEmail,null, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.CCEmail)
        </div>
</div>

是否有其他/更好的方式来显示电子邮件地址而不是ListBoxFor

但是当我选择电子邮件地址..然后点击提交时,我收到一条错误消息:

  

值'John.Doe @ test.com,Test.User1 @ test.com'无效。

那些不是真正的电子邮件地址..我使用的是有效的。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

即使我找到了替代解决方案,我仍然在寻找更清洁的解决方案。这就是我所做的。

我将CCEmail属性更改为List<string>

因此,在HttpPost方法中,我将foreach循环更改为以下语法:

foreach(var item in model.CCEmail)
{
    message.CC.Add(new MailAddress(item));
}

然后在我看来,我这样做了:

<div class="form-group">
    @foreach(var item in Model.CCEmail)
    {
        @Html.LabelFor(m => m.CCEmail, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBox("CCEmail", item, htmlAttributes: new { @class = "form-control", @readonly = true  } )
            </div>
    }  
</div>

即使这会创建2个单独的文本框,它仍然会提交为2个单独的电子邮件地址,而不是两个都合并为我认为我的OP中的错误。

同样,如果您知道更简单/更清洁的解决方案,请发布!