假设我有以下ViewModels:
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个输入组(3xname和3x电子邮件),并且可以通过添加新组的按钮展开。现在,当列表发布时,将遍历电子邮件地址并对其进行处理。在处理过程中,可能有一项返回错误,我不希望该过程停止,但我希望它只存储此错误消息并将其返回给视图,以便我可以在导致错误的表单组中显示该错误。我有点迷惑于如何存储错误并将它们返回到视图来呈现它们。any1有关于如何实现这一点的想法吗?
此外,我所要求的验证现在并不完美,因为如果有人只想邀请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.
}
}发布于 2015-08-18 21:55:57
看看这个链接:http://www.asp.net/mvc/overview/older-versions-1/models-(data)/performing-simple-validation-cs
在您的cshtml页面上,您可以添加一个Html.ValidationMessageFor作为错误消息的占位符,并且可以在您的控制器中添加ModelState.AddModelError来指定要显示的错误消息。
发布于 2015-08-18 21:57:14
为了避免在仅指定1或2个被邀请者时触发验证代码,您需要从视图模型中删除所需的属性。然后,当您在处理代码中发现错误时,可以使用:
ModelState.AddModelError ("key1","Some error message goes here");如果您在自定义模型绑定器中进行处理,则需要使用:
bindingContext.ModelState.AddModelError(....)在您的视图中,您将使用
@Html.ValidationMessage("Key1")当然,诀窍是确保"Key1“可以是一个可以为每个重复字段计算的值(可能基于列表中字段的索引,如"email1","name2")。
https://stackoverflow.com/questions/32074097
复制相似问题