2011-09-14 49 views

回答

7

不幸的是,這是不是一件FluentValidation有覆蓋能力 - MVC驗證的可擴展性模型在很多地方都有所限制,而且我一直無法找到覆蓋這個特定消息的方法。

您可以使用的另一種方法是在視圖模型上定義兩個屬性 - 一個作爲字符串,另一個作爲可爲空的double。您將使用字符串屬性來實現MVC綁定目的,並且double屬性將執行轉換(如果可以)。然後,您可以將其用於驗證:

public class FooModel { 
    public string Foo { get; set; } 

    public double? ConvertedFoo { 
     get { 
      double d; 
      if(double.TryParse(Foo, out d)) { 
      return d; 
      } 
      return null; 
     } 
    } 
} 


public class FooValidator : AbstractValidator<FooModel> { 
    public FooValidator() { 
     RuleFor(x => x.ConvertedFoo).NotNull(); 
     RuleFor(x => x.ConvertedFoo).GreaterThan(0).When(x => x.ConvertedFoo != null); 
    } 
} 
+0

您是否嘗試與ASP.NET MVC團隊聯繫? – SiberianGuy

+0

是的,我在MVC2預覽期間多次提出它,但從未改變過。 –

+0

讓我們再試一次:http://forums.asp.net/p/1721550/4601626.aspx/1?p=True&t=634518558226229075 – SiberianGuy

0

你可以使用.WithMessage()方法來自定義錯誤消息:

RuleFor(x => x.Foo) 
    .NotEmpty() 
    .WithMessage("Put your custom message here"); 

,如果你想使用本地化的信息與資源:

RuleFor(x => x.Foo) 
    .NotEmpty() 
    .WithLocalizedMessage(() => MyLocalizedMessage.FooRequired); 
+1

它不起作用。當ASP.NET嘗試將字符串轉換爲雙倍時出現錯誤 – SiberianGuy

相關問題