好的,假设您的视图有四个部分(每个部分具有单独的视图模型),这些部分都与主视图模型相关联。您点击提交和所有数据发布。您运行一些服务器端验证,并注意到4个部分中的3个中的字段中发生验证错误。所以,我想回发验证错误,但高于它们所属的部分。
您的实施想法是什么?
答案 0 :(得分:2)
有趣的场景。如果我理解正确:您希望验证复杂的表单帖子,如果它无效,则将它们返回到视图并在各自的表单区域上方显示错误消息。您无法使用<%= Html.ValidationSummary()%>的原因是否需要对表单的不同区域使用不同的摘要,具体取决于哪些是有效的,哪些不是?
带上一粒盐,但我要做的是为每个表格区域或部分写一个自定义的HtmlHelper。您可以将自定义代码基于Html.ValidationSummary的当前实现,并找到代码here。在每个自定义验证摘要中,您可以在ModelState中查找特定错误并显示这些错误。我没有太多时间,也没有经过测试,但这可能会让你开始:
public static class CustomValidationExtensions
{
public static string CustomValidationSummary(this HtmlHelper htmlHelper)
{
if (!htmlHelper.ViewData.ModelState.ContainsKey("YourFormName"))
return null;
ModelState modelState = htmlHelper.ViewData.ModelState["YourFormName"];
ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors;
ModelError modelError = ((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors[0];
if (modelError == null)
return null;
TagBuilder builder = new TagBuilder("span");
builder.MergeAttribute("class", HtmlHelper.ValidationMessageCssClassName);
builder.SetInnerText(modelError.ErrorMessage);
return builder.ToString(TagRenderMode.Normal);
}
}
这只检查一个ModelState元素并显示一些html。您需要手动添加所有ModelState元素或循环遍历集合,并仅显示应用于该部分视图的错误消息。无论哪种方式,我认为最好的办法是以典型的方式向ModelState添加错误,并直接使用ModelState来显示适用于该部分的错误。当然,您可以操作html并使用输出执行任何操作。
答案 1 :(得分:0)
不同的问题,同样的解决方案: