我创建了一个非常简单的测试项目来说明问题。
我的模特课
public class HomeModel
{
[Required(ErrorMessage="Missing property1.")]
public string Property1
{
get;
set;
}
[Remote("ValidateProperty2", "Home", HttpMethod="Get", AdditionalFields = "Property3", ErrorMessage="Property2 wrong!")]
public string Property2
{
get;
set;
}
public string Property3
{
get;
set;
}
}
我的控制器
public class HomeController : Controller
{
public ActionResult Index()
{
HomeModel model = new HomeModel();
return View(model);
}
[HttpPost]
public ActionResult Index(HomeModel model)
{
return View(model);
}
public ActionResult ValidateProperty2(string property2, string property3)
{
return Json(true, JsonRequestBehavior.AllowGet);
}
}
我的观点
@model RemoteValidationTest.Models.HomeModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
</head>
<body>
@using (Ajax.BeginForm(new AjaxOptions
{
HttpMethod = "POST"
}))
{
@Html.TextBoxFor(x => x.Property1) @Html.ValidationMessageFor(x => x.Property1)<br />
@Html.TextBoxFor(x => x.Property2) @Html.ValidationMessageFor(x => x.Property2)<br />
@Html.TextBoxFor(x => x.Property3) @Html.ValidationMessageFor(x => x.Property3)<br />
<input type="submit" />
}
</body>
</html>
我的web.config
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
这里没什么好看的。我有一个有3个属性的模型类。第一个是必需的,第二个是远程验证,我相信我已经正确地创建了动作方法。我将break piont设置为ValidateProperty2
函数,它永远不会被调用。
我也使用过FireBug,客户端甚至都没有尝试调用服务器端。
这里的代码有什么问题?
编辑1: 我想我得到了一些东西,远程验证只会在控件(例如文本框)有值的情况下触发。空控件永远不会触发验证。在我的情况下,我实际上尝试implmenet一个更复杂的逻辑,即使控制文本为空(我检查其他属性的值)我需要验证。它甚至可能吗?
答案 0 :(得分:0)
我在这里有mvc3的工作版本: http://completedevelopment.blogspot.com/2011/08/remote-ajax-validation-in-mvc3.html
d / l它可以比较文件。
答案 1 :(得分:0)
问题是当您第一次按下发送按钮时,验证不会自动触发。以下是在页面加载时启动验证的方式,以便在每次提交时都会触发:
"Required" validation attribute not working in asp.net mvc 3 while others work