我遇到了一些ASP MVC错误处理问题。
在用户尝试连接到设备的表单上。如果用户输入了无效的设备名称,则告诉用户该名称无效是非常简单的。
我正在我的所有数据类上实现IEnumerable<RuleViolation> GetRulesViolations()
。 RuleViolation
类有两个字段:PropertyName
和ErrorMessage
如果我在提交时遇到错误,我只需调用GetRulesViolations方法并在ModelState上设置错误:
catch {
foreach (var issue in device.GetRulesViolations()) {
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return View();
}
并且使用一些后台asp mvc magic,错误出现在model.Name的ValidationMessage占位符的视图中:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<p>
<input type="submit" value="Connect" />
</p>
</fieldset>
}
现在出现问题:
如果我得到的错误类似于“无法连接到设备”,那么这与Name
字段无关。这是一条应该出现在表单上方的消息,因为它与整个表单有关。
有没有一种简单的方法来设置它像ModelState.AddError(“错误消息”)而不告诉密钥所以它将应用于整个表单或者我应该在Data类上创建一个Error
隐藏属性在表单上方放置该属性的验证消息?
答案 0 :(得分:3)
是的,空字段名称,如下所示:
ModelState.AddModelError("", issue.ErrorMessage);