我遵循教程併爲我的應用程序創建了一個custom remote validator
,這樣它即使禁用javascript也可以工作。它通過指定controller
和action
以及可選的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
,但他們有某種不同,請澄清給我。
也許當我回答這個問題,我不知道我能投票的問題:) –