2013-08-02 19 views
0

我有一個「郵政編碼」文本框,爲了正確插入我的數據庫,它需要在中間有一個空白區域,即「N18 2JY」。MVC - 如何檢查文本框中的空格

有沒有一種方法,我可以驗證/檢查,看看用戶是否已經正確輸入郵政編碼,如果它的缺失給出錯誤信息?

感謝提前:)

+2

你試過搜索正則表達式嗎? – Abhitalks

回答

0

@Martin Liversage回答是更好的答案MVC模式來控制驗證。

如果你覺得正則表達式是很常見的,那麼你可以重寫RegularExpressionAttribute像下面的示例: -

public class AlphaSpaceAttribute : RegularExpressionAttribute, IClientValidatable 
{ 
    public AlphaSpaceAttribute() 
     : base(@"^([a-zA-Z ]*)\s*") 
    { 
    } 
    public override string FormatErrorMessage(string name) 
    { 
     return Resources.UDynamics.EM_10003; 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     var rule = new ModelClientValidationRule 
     { 
      ErrorMessage = FormatErrorMessage(this.ErrorMessage), 
      ValidationType = "regex", 
     }; 
     rule.ValidationParameters.Add("pattern", @"^([a-zA-Z ]*)\s*"); 
     yield return rule; 
    } 


} 

上面的代碼我重寫RegularExpressionAttribute只允許A-Z和間距。請記住一個屬性只允許一個RegularExpressionAttribute。

+0

謝謝,但是,當我輸入郵編沒有空格,然後關閉然後重新打開瀏覽器,它已經保存了兩個無關的下拉列表,我以前選擇了什麼...... – Pete

+0

對不起,我不明白爲什麼它保存兩個不相關的下拉列表,因爲不顯眼的驗證不會涉及此問題。 –

+0

沒有它的好處,它是我以前沒有找到的一個單獨的驗證問題。感謝您所有的幫助。它的工作和我學到了新東西! – Pete

0

嘗試使用正則表達式驗證控制,生成正則表達式去here

2

你可以做,使用unobtrusive validation這將使如果客戶端驗證繞過來進行驗證客戶端,如果可能的,而且服務器端。簡單地說,你需要添加一個或多個屬性驗證您的視圖模型:

class MyViewModel { 

    [RegularExpression("[^ ]+ [^ ]+")] 
    public String PostCode { get; set; } 

} 

,然後在視圖模型視圖渲染後的代碼字段:

Html.EditorFor(model => model.PostCode) 

在你郵寄到行動該表單提交時需要驗證,該模型是有效的:

public ActionResult Save(MyViewModel viewModel) { 
    if (!ModelState.IsValid) 
    return View(viewModel); 

    ... process a valid submission 
} 

還需要在Web.config開啓不引人注目的驗證:

<appSettings> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings>