2017-05-31 67 views
0

我實際上有一個MVC.Net窗體,使用視圖模型的字段有RequiredRemote屬性。客戶端驗證對Required部分非常有效......但不像我期望的Remote如何在不提交表單的情況下進行客戶端遠程驗證?

問題是我不能讓Remote驗證,直到形式已經被驗證一次:

  • 的名稱字段填的現有用戶名 - 沒有顯示任何錯誤,因爲沒有做出通話服務器
  • 我驗證表單,一個Ajax調用,以檢查用戶名的有效性,以及錯誤信息顯示
  • 現在,每次我輸入用戶名外地的東西,一個Ajax調用時和錯誤消息相應更新

這裏是模型:

public class TestModel 
{ 
    [Required(ErrorMessage = "Name is Required")] 
    [MinLength(3)] 
    [Remote("CheckUserName", "CSValidationTest")] 
    public string Name { get; set; } 
} 

的觀點:

@model TestModel 
@{ 
    ViewBag.Title = "Index"; 
} 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Employee</legend> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.Name) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Name) 
      @Html.ValidationMessageFor(model => model.Name) 
     </div> 
     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

@section scripts 
{ 
    <script src="~/Scripts/jquery.validate.js" type="text/javascript"></script> 
    <script src="~/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script> 
} 

而且控制器:

public class CSValidationTestController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public JsonResult CheckUserName(string userName) 
    { 
     bool result = new Random().Next() > Int32.MaxValue/2; 

     if (result) 
      return Json(true, JsonRequestBehavior.AllowGet); 
     else 
      return Json("Username already used, guid for call unicity : " + Guid.NewGuid().ToString(), JsonRequestBehavior.AllowGet); 
    } 
} 

另外,我無法取出Required屬性,因爲JavaScript可以被禁用或調整,並使用ModelState.IsValid是非常方便。

有沒有辦法在第一次提交之前調用遠程規則?

+0

使用JQuery驗證功能,如果需要我會分享你的代碼。 –

+0

@LaxmanGite你是什麼意思的「JQuery驗證功能」? – gobes

+0

在提交表單之前,在任何事件上嘗試此類代碼:function isvalid(){if($(「#DrpTest option:selected」)。val()==「」){return「

請選擇測試。 +「

\ n」; } else {return「」; }} –

回答

0

確保你已啓用,這兩個在webconfig文件中。

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

正如我寫的,「客戶端驗證對於Required部分非常適用「。客戶端驗證效果很好,我實際上想要改變它的行爲:) – gobes

+0

您將MinLength設爲3,一旦名稱值達到最小長度,每個按鍵請求都將發送到CheckUserName()方法。 –

相關問題