将非字段相关的错误添加到asp mvc表单

时间:2011-10-19 11:34:37

标签: asp.net-mvc error-handling

我遇到了一些ASP MVC错误处理问题。

在用户尝试连接到设备的表单上。如果用户输入了无效的设备名称,则告诉用户该名称无效是非常简单的。

我正在我的所有数据类上实现IEnumerable<RuleViolation> GetRulesViolations()RuleViolation类有两个字段:PropertyNameErrorMessage如果我在提交时遇到错误,我只需调用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隐藏属性在表单上方放置该属性的验证消息?

1 个答案:

答案 0 :(得分:3)

是的,空字段名称,如下所示:

ModelState.AddModelError("", issue.ErrorMessage);