ModelState.AddModelError()的错误消息不会出现

时间:2017-05-10 18:13:52

标签: c# html asp.net-mvc visual-studio-2015

我的程序拥有可以创建项目(行为类似于文件夹)的用户,并且在项目内部用户可以添加文档。 用户可以与其他用户共享项目。

我已经阻止用户可以在同一个项目中两次添加同一个人,但我似乎无法显示我想要的错误消息。

电子邮件具有必需属性,并显示这些错误消息(如果它无效且盒子为空,则都会显示。)

我没有使用ModelState.AddErrorMessage()吗?

这是变量在模型中的方式

    [EmailAddress(ErrorMessage ="Please enter a valid email address!")]
    [Display(Name = "Email")]
    [Required(ErrorMessage = "You must enter an email!")]
    public string email { get; set; }

这是我的控制器的一部分

//Prevent double share
List<ProjectModel> userProjects = projectService.getAllProjects(user.email);
    foreach(var proj in userProjects)
    {
        if(proj.name == userService.getProjectByID(urlInt).name)
        {
            //This is the error message I am trying to display
            ModelState.AddModelError(user.email, "This user already has access to this project!");
            return View(user);
        }
    }
userService.share(user.email, urlInt);
return RedirectToAction("../Dashboard/Dashboard");

这是我的观点

@using (Html.BeginForm("Share", "User", FormMethod.Post, new { @class = "add-document-form" }))
{ 
    <div class="add-document-div">
        <div class="form-group">
            <label for="email" class="control-label">Email address</label>
            <br />
            @Html.TextBoxFor(m => m.email, new { @class = "form-conrtol" })
            <br />

            <!--Here is the validation for the email button-->
            @Html.ValidationMessageFor(m => m.email, "", new { @class = "text-danger" })
        </div>
    </div>
    <input type="submit" class="btn btn-fab" value="Send invitation" />
}

4 个答案:

答案 0 :(得分:1)

您使用ModelState.AddModelError的重载需要两个参数;要添加错误的model属性的名称,以及实际错误。您需要确保第一个参数是正确的名称。在这种情况下,我假设"email"

目前,您只需提供user.email包含的内容,而不是字段名称。

答案 1 :(得分:0)

这是

的语法
ModelState.AddErrorModel("<some form field name>", "<your error message>");

第一个参数是表单字段名称,以便mvc知道绑定错误消息的位置。

ModelState.AddModelError(user.email, "This user already has access to this project!");

正在尝试将错误消息绑定到user.email的值。这在您的表单中不存在。

答案 2 :(得分:0)

要通过控制器为服务器端验证添加错误,您只需要以字符串格式提供密钥名称..所以在您的情况下这应该有效:

ModelState.AddErrorModel("email", "This user already has access to this project!");
return View(user);

请告诉我这是否有帮助!

答案 3 :(得分:0)

事实证明,我只需将user.email更改为"email",就像已经指出的那样。

当时对我不起作用的原因是因为另一个人正在清理我们的ServiceBase并破坏了我与数据库的连接,所以我的表单根本没有发布。

我修复了错误信息后显示。

感谢大家的帮助!