2017-11-25 169 views
3

試圖驗證我的電話號碼,以便任何人都不能在輸入框內輸入隨機字母。我確實有不引人注意和有效的腳本。到目前爲止,我已經盡了模型中的幾件事情,在MVC中實現驗證

[RegularExpression(@"^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$", ErrorMessage = "Not a valid Phone number")] 
[Display(Name = "Phone")] 
public string SMSPhoneNumber; 

[DataType(DataType.PhoneNumber)] 
public string SMSPhoneNumber; 

這是我的看法

<form role="form" action="#"> 
    @Html.AntiForgeryToken() 

    <div class="form-group"> 
     <label class="control-label"><b>Phone Number</b></label> 
     @Html.TextBoxFor(model => model.SMSPhoneNumber, new {@class = "form-control", @placeholder = "Enter Phone Number", @id = "phoneNumber", Name = "phoneNumber", data_val_required = "Please enter a phone number"}) 
     @Html.ValidationMessageFor(model => model.SMSPhoneNumber, null, new { @class = "text-danger" }) 
    </div> 
    <button type="button" data-dismiss="modal" class="btn dark btn-outline"> Cancel</button> 
    <button type="button" data-toggle="modal" id="" class="btn green" onclick="javascript: updateDatabase();">Submit</button> 
</form> 

這是我的控制器

[HttpPost]  
public ActionResult UpdatePhoneNumber(string phoneNumber) 
{ 
    if (ModelState.IsValid) 
    {                                                           
     return View(); 
    } 
} 

的驗證仍然無法正常工作,會發生什麼是問題嗎?

感謝

回答

2

的原因,你沒有得到客戶端驗證是,你必須使用new { Name = "phoneNumber" }改變name屬性,您尚未創建phoneNumber驗證消息佔位符(只有我一個SMSPhoneNumber)。

在任何情況下,您都不應該更改name屬性。你也不應該加入data-val-*屬性(並且不清楚你爲什麼改變id屬性)。正確使用時,HtmlHelper方法將始終爲模型綁定和驗證生成正確的html。

你沒有得到任何服務器端驗證的原因是你沒有綁定到你的模型,只是爲了string

更改視圖代碼

@Html.TextBoxFor(m => m.SMSPhoneNumber, new { @class = "form-control", placeholder = "Enter Phone Number" }) 
@Html.ValidationMessageFor(m => m.SMSPhoneNumber, null, new { @class = "text-danger" }) 

,改變POST方法來獲得你的模型(假設其說public class Company),然後

[HttpPost] 
public ActionResult UpdatePhoneNumber(Company model) 
+1

還要注意你'的onclick =「JavaScript的:updateDatabase ();'這表明你可能使用ajax來提交,它可能不會獲得客戶端驗證,除非該函數也可以在發佈到控制器之前通過檢查'.valid()'來正確實現。 –

+0

建議您編輯您的問題也包括在內,所以我可以如有必要,請檢查並更正 –

+0

已編輯,我的頁面正在按照我的要求進行操作,這裏只有問題是所有的驗證部分。 – Draklin