首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >要查看的IList中的每个项目的C# MVC返回错误

要查看的IList中的每个项目的C# MVC返回错误
EN

Stack Overflow用户
提问于 2015-08-18 21:40:12
回答 2查看 100关注 0票数 0

假设我有以下ViewModels:

代码语言:javascript
复制
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个人,那么验证将为我提供的第二个和第三个输入组触发。我还需要想办法解决这个问题。

处理代码:

代码语言:javascript
复制
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.

            }
}
EN

回答 2

Stack Overflow用户

发布于 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来指定要显示的错误消息。

票数 0
EN

Stack Overflow用户

发布于 2015-08-18 21:57:14

为了避免在仅指定1或2个被邀请者时触发验证代码,您需要从视图模型中删除所需的属性。然后,当您在处理代码中发现错误时,可以使用:

代码语言:javascript
复制
 ModelState.AddModelError ("key1","Some error message goes here");

如果您在自定义模型绑定器中进行处理,则需要使用:

代码语言:javascript
复制
bindingContext.ModelState.AddModelError(....)

在您的视图中,您将使用

代码语言:javascript
复制
@Html.ValidationMessage("Key1")

当然,诀窍是确保"Key1“可以是一个可以为每个重复字段计算的值(可能基于列表中字段的索引,如"email1","name2")。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32074097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档