Asp.net mvc ASP.NET MVC用户消息传递实现
好的,假设您的视图有四个部分(每个部分都有单独的视图模型),它们都绑定到主视图模型。点击submit,所有数据都会发布出来。您运行了一些服务器端验证,发现验证错误出现在4个部分中的3个字段中。因此,我想将验证错误发回,但要放在它们所属的部分之上Asp.net mvc ASP.NET MVC用户消息传递实现,asp.net-mvc,validation,Asp.net Mvc,Validation,好的,假设您的视图有四个部分(每个部分都有单独的视图模型),它们都绑定到主视图模型。点击submit,所有数据都会发布出来。您运行了一些服务器端验证,发现验证错误出现在4个部分中的3个字段中。因此,我想将验证错误发回,但要放在它们所属的部分之上 您的实施思路是什么?不同的问题,相同的解决方案: 有趣的场景。如果我理解正确:您希望验证一个复杂的表单帖子,如果它无效,则将其返回到视图,并在其各自的表单区域上方显示错误消息。您不能使用的原因是,根据哪些内容有效,哪些内容无效,表单的不同区域需要不同的摘
您的实施思路是什么?不同的问题,相同的解决方案:
有趣的场景。如果我理解正确:您希望验证一个复杂的表单帖子,如果它无效,则将其返回到视图,并在其各自的表单区域上方显示错误消息。您不能使用的原因是,根据哪些内容有效,哪些内容无效,表单的不同区域需要不同的摘要 对此我持保留态度,但我要做的是为每个表单区域或部分表单编写一个定制的HtmlHelper。您可以根据Html.ValidationSummary的当前实现来编写自定义代码,并找到代码。在每个自定义验证摘要中,您可以查找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并对输出执行任何您想要的操作