我有一个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'无效。
那些不是真正的电子邮件地址..我使用的是有效的。
感谢任何帮助。
答案 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中的错误。
同样,如果您知道更简单/更清洁的解决方案,请发布!