0

我有一个由2个部分视图加上页面中已有内容组成的视图。我希望每个视图都有一个验证摘要。一切工作正常,除了当其中一个部分出现错误时,消息会显示在每个验证摘要中,因此它在页面中出现3次。我想解决这个问题。链接到它自己的部分视图的每个验证摘要

我在网上查了一下,看到有一种方法可以做到这一点是这样的:

var SecurityQuestionsErrors = ViewData.ModelState.Where(ms => ms.Key == "SecurityQuestions"); 
if (SecurityQuestionsErrors.Count()>0) 
{ 
    @Html.ValidationSummary("", new { @class = "" }) 
} 

所以我有这样的代码在每一个局部视图以查看该错误是这一个特别。

当错误来自控制器(我可以添加一个关键我自己,它工作正常):

  catch (FaultException<IncorrectQuestionFault>) 
     { 
      // question is incorect 
      ModelState.AddModelError("SecurityQuestions", Resources.errors.incorrectQuestion); 
     } 

但是,当错误来自视图模型它不添加拧钥匙,IM ..

 [Required(ErrorMessageResourceName = "IsRequired", ErrorMessageResourceType = typeof(Resources.errors))] 
    [StringLength(40, MinimumLength = 7, ErrorMessageResourceName = "NotLongEnough", ErrorMessageResourceType = typeof(Resources.errors))] 
    [Display(Order = 0, Name = "question", ResourceType = typeof(Resources.errors))] 
    public string question{ get; set; } 

所以我的问题是:我在做这个好方法吗?有没有办法给ViewModel的错误添加一个键?我应该以另一种方式来做这件事吗?

所有帮助表示赞赏:d

回答

0

假设这是你的视图模型属性:

[Required(ErrorMessageResourceName = "IsRequired", ErrorMessageResourceType = typeof(Resources.errors))] 
[StringLength(40, MinimumLength = 7, ErrorMessageResourceName = "NotLongEnough", ErrorMessageResourceType = typeof(Resources.errors))] 
[Display(Order = 0, Name = "question", ResourceType = typeof(Resources.errors))] 
public string question{ get; set; } 

@Html.ValidationSummary(false, "", new { @class = "text-danger" }) 


@Html.LabelFor(x => x.question) 
@Html.EditorFor(x => x.question) 

这在默认情况下将采取所有验证错误,并把他们在自己的div

如果你试图赶上控制器上的错误,你可以:

if (!ModelState.IsValid) 
{ 
    // the model is invalid 

    //if you are trying to catch different errors here 
    var modelStateErrors = this.ModelState.Values.SelectMany(m => m.Errors); 
    //Now you have all the errors and can give specific messages for a given error 
    ModelState.AddModelError(string.Empty, "Your error goes here"); 
} 
+0

我正在这样做因为我想在每个视图的相同位置都有所有错误,并且每个文本框附近都没有错误。错误是法国的,但我想你可以得到的想法http://prntscr.com/d4dltg 我要回到控制器,因为该应用程序背后的Web服务引发故障,这是我需要的地方抓住他们^^。视图模型验证输入内容的格式,但Web服务验证数据本身。 – Helpha

+0

@Helpha我想我的更新答案将解决你正在努力完成的任务。 – Robert