【发布时间】:2015-08-18 13:40:12
【问题描述】:
假设我有以下 ViewModel:
public class EmailFromViewModel
{
public IList<InviteEmailAddress> InviteEmailAddress {get; set;}
}
public class InviteEmailModel
{
[RegularExpression(@"^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$", ErrorMessage = "Invalid Email Address")]
[DataType(DataType.EmailAddress)]
[Required(ErrorMessage = "Email Address is required.")]
public string Email { get; set; }
[Required(ErrorMessage = "Name is required.")]
public string Name { get; set; }
}
在我看来,我有一个 for 循环来显示姓名和电子邮件输入,以便用户可以邀请人们加入。该视图默认显示 3 个输入组(3 个名称和 3 个电子邮件),并且可以通过添加新组的按钮进行扩展。现在,当列表发布时,会通过电子邮件地址循环并处理它们。在处理时,其中一项可能会返回错误,我不希望进程停止,但我希望它只存储此错误消息并将其返回到视图,以便我可以在表单组中显示错误导致错误。 我有点迷失如何存储错误并将它们返回到视图中以呈现它们。有没有人知道如何实现这一目标?
此外,我现在所需的验证也不完美,因为如果有人只想邀请 1 个人,那么验证将针对我呈现的第二个和第三个输入组触发。我仍然需要弄清楚如何解决这个问题。
处理代码:
public async Task<ActionResult> InviteEmail(InviteViewModel inviteUser)
{
foreach (var i in inviteUser.InviteEmailAddresses)
{
var user = _userService.GetUsersByEmail(i.Email);
if (user != null)
{
if (!_userService.CanInviteUser(user.Id, i.DumpId))
//Dont return but save result and present to user.
}
if (ModelState.IsValid)
{
Guid tokenId = Guid.NewGuid();
SecurityToken securityToken = new SecurityToken()
{
Token = tokenId
};
_securityTokenService.CreateSecurityToken(securityToken );
UserMailer.Invite(i.Email).Send();
//Dont return but save result and present to user.
}
else
//Dont return but save result and present to user.
}
}
【问题讨论】:
-
发布您当前的“处理”代码。
-
完成,但有点简单。
-
如果您只想允许一个
InviteEmailAddress,那么您的初始视图应该只包含一个,然后有一个添加按钮可以选择添加更多。但是您需要展示如何动态添加新项目(我假设您将 ajax 与BeginCollectionItem帮助器结合使用?) -
还建议您使用
[EmailAddress]属性而不是您的[RegularExpression]属性
标签: c# asp.net-mvc