我实际上有一个MVC.Net表单,其中使用的viewmodel具有Required
和Remote
属性的字段。客户端验证对于Required
部分非常有用......但不像我期望的那样Remote
。
问题是,在表单验证一次之前,我无法进行Remote
验证:
以下是模型:
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 :(得分:0)
确保您已在 webconfig
文件中启用了这两项。
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>