C# 来自ModelState.AddModelError()的错误消息不';不出现
我的程序有可以创建项目(其行为类似于文件夹)的用户,用户可以在项目内添加文档。 用户可以与其他用户共享项目 我已经阻止用户在同一个项目中添加同一个人两次,但我似乎无法显示我想要的错误消息 该电子邮件具有必需的属性,并且会显示这些错误消息(如果无效,或者框为空) 我不是在使用ModelState.AddErrorMessage()吗 这就是变量在模型中的方式C# 来自ModelState.AddModelError()的错误消息不';不出现,c#,html,asp.net-mvc,visual-studio-2015,C#,Html,Asp.net Mvc,Visual Studio 2015,我的程序有可以创建项目(其行为类似于文件夹)的用户,用户可以在项目内添加文档。 用户可以与其他用户共享项目 我已经阻止用户在同一个项目中添加同一个人两次,但我似乎无法显示我想要的错误消息 该电子邮件具有必需的属性,并且会显示这些错误消息(如果无效,或者框为空) 我不是在使用ModelState.AddErrorMessage()吗 这就是变量在模型中的方式 [EmailAddress(ErrorMessage ="Please enter a valid email address!")
[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");
//防止双重共享
List userProjects=projectService.getAllProjects(user.email);
foreach(用户项目中的var项目)
{
if(proj.name==userService.getProjectByID(urlInt.name)
{
//这是我试图显示的错误消息
AddModelError(user.email,“此用户已经有权访问此项目!”);
返回视图(用户);
}
}
userService.share(user.email,urlInt);
返回重定向到操作(“../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" />
}
@使用(Html.BeginForm(“Share”、“User”、FormMethod.Post、new{@class=“adddocumentform”}))
{
电子邮件地址
@TextBoxFor(m=>m.email,新的{@class=“form conrtol”})
@Html.ValidationMessageFor(m=>m.email,“,new{@class=“text danger”})
}
您正在使用的重载包含两个参数;要添加错误的模型属性的名称,以及实际错误。您需要确保第一个参数的名称正确。在这种情况下,我假设“email”
当前,您将为它提供
user.email
包含的任何内容,而不是字段名。这是
ModelState.AddErrorModel("<some form field name>", "<your error message>");
正在尝试将错误消息绑定到user.email的值。表单中不存在此项。若要通过控制器添加错误以进行服务器端验证,只需以字符串格式提供密钥名称。。因此,在您的情况下,这应该是可行的:
ModelState.AddErrorModel("email", "This user already has access to this project!");
return View(user);
让我知道这是否有帮助 原来我只需要把
用户。email
改成“email”
就像已经指出的那样
当时,这对我不起作用的原因是另一个人正在清理我们的服务库,并中断了我与数据库的连接,因此我的表单根本没有发布
在我修复后,错误消息显示
谢谢大家的帮助 非常感谢您的快速回复!我将
user.email
更改为“email”
,这是变量的名称,但消息仍然没有显示。知道为什么吗?“
空字符串确实会被AddModelErrorHmm覆盖…它似乎不起作用,可能它没有覆盖模型中给出的验证。也许我需要考虑另一种方法。谢谢你的建议!现在可以了!我把我的答案贴在下面,谢谢你的帮助!谢谢你的回复!我将user.email
更改为“email”
,这是变量的名称,但消息仍然没有显示。你知道为什么吗?你的表单中有这样一行:@Html.ValidationSummary(true,“,new{@class=“text danger”})
?
ModelState.AddErrorModel("email", "This user already has access to this project!");
return View(user);