1
我試圖通過Unobtrusive AJAX表單在MVC 3中實現客戶端驗證。Unobtrusive AJAX不驗證「不需要」字段的自定義屬性
public class PhoneNumberAttribute : RegularExpressionAttribute, IClientValidatable
{
private const string Message = " must be a valid phone number";
public PhoneNumberAttribute()
: base(@"^[\s\d\+\(\)]+$")
{
ErrorMessage = "{0}" + Message;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
return new List<ModelClientValidationRule>() {
new ModelClientValidationRule{
ValidationType="phonenumber",
ErrorMessage= metadata.DisplayName + " " + Message
}
};
}
}
型號:
public class MyModel
{
[DisplayName("Phone Number")]
[PhoneNumber]
public string PhoneNumber{ get; set; }
}
HTML
<% using (Ajax.BeginForm("Contact", new AjaxOptions() { UpdateTargetId = "ajaxcontactform",
OnBegin = "ShowProcessing",
OnComplete = "HideProessing",
InsertionMode = InsertionMode.Replace
}))
{%>
<%: Html.ValidationSummary()%>
<%: Html.TextBoxFor(m => m.PhoneNumber, new { Class = "contacttextform" })%>
<input id="sendBtn" name="send" type="submit" class="contactformbutton" value="Send" />
<%}%>
我已經包含了所需的.js文件和其他客戶端驗證適用於具有[必需]屬性以及自定義字段驗證屬性。
請建議爲什麼它不能用於PhoneNumber字段?
謝謝,
感謝您的回覆利亞姆。我正在考慮用這個自定義驗證屬性註冊驗證,但我沒有。這是因爲,我有更多的自定義屬性爲我的模型字段,並沒有註冊使用JavaScript的作品。我剛剛在MVC 3中讀到,我們可以通過實現IClientValidatable來註冊客戶端驗證。如果我錯了,請糾正。乾杯 – jNet
不,你仍然需要在JavaScript中註冊它。 IClientValidatable僅定義了一種更簡單的方法來定義驗證屬性,因爲過去實施驗證規則非常繁瑣 – Liam
已添加更新 – Liam