我實際上有一個MVC.Net窗體,使用視圖模型的字段有Required
和Remote
屬性。客戶端驗證對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
是非常方便。
有沒有辦法在第一次提交之前調用遠程規則?
使用JQuery驗證功能,如果需要我會分享你的代碼。 –
@LaxmanGite你是什麼意思的「JQuery驗證功能」? – gobes
在提交表單之前,在任何事件上嘗試此類代碼:function isvalid(){if($(「#DrpTest option:selected」)。val()==「」){return「
請選擇測試。 +「
\ n」; } else {return「」; }} –