2015-09-19 46 views
1

我遵循教程併爲我的應用程序創建了一個custom remote validator,這樣它即使禁用javascript也可以工作。它通過指定controlleraction以及可選的ErrorMessage與通常的Remote驗證一樣工作。「ErrorMessage =」用於驗證的自定義屬性的命名參數

下面是完整的代碼:

public class RemoteEmailCheckAttribute : RemoteAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     //get the controller 
     Type controller = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(type => type.Name.ToLower() == string.Format("{0}Controller", this.RouteData["controller"].ToString()).ToLower()); 
     if (controller != null) 
     { 
      MethodInfo action = controller.GetMethods().FirstOrDefault(method => method.Name.ToLower() == this.RouteData["controller"].ToString().ToLower()); 

      if (action != null) 
      { 
       object instance = Activator.CreateInstance(controller); 
       object response = action.Invoke(instance, new object[] { value }); 
       if (response is JsonResult) 
       { 
        object jsonData = ((JsonResult)response).Data; 
        if (jsonData is bool) 
        { 
         return (bool)jsonData ? ValidationResult.Success : new ValidationResult(this.ErrorMessage); 
        } 
       } 
      } 

     } 

     return new ValidationResult(this.ErrorMessage); 
    } 


    public RemoteEmailCheckAttribute(string routeName) 
     : base(routeName) 
    { 

    } 


    public RemoteEmailCheckAttribute(string action, string controller) 
     : base(action, controller) 
    { 

    } 

    public RemoteEmailCheckAttribute(string action, string controller, string areaName) 
     : base(action, controller, areaName) 
    { 

    } 
} 

這是我將它放在我的財產,

[RemoteEmailCheck("IsEmailTaken","Enrollment",ErrorMessage="Email is already in use. Please pick something else")] 
public string email { get; set; } 

我的問題是,,因爲我將使用該constructor

​​

由於第三參數實際上是string的任何名字,怎麼能夠得到指定的ErrorMessage=" "

我一直在網上檢查/研究,並閱讀了關於Named parameters,但他們有某種不同,請澄清給我。

+0

也許當我回答這個問題,我不知道我能投票的問題:) –

回答

3

創建屬性時,任何公共非靜態讀寫字段或屬性都是命名參數。

欲瞭解更多信息,請參閱Creating Custom Attributes

+2

一個修正:應該也是非靜態的。 –

+0

哦,對,所以他們可以直接訪問構造函數? –

+0

當用作屬性時,是。 –

相關問題