問題を説明するために、非常に単純なテスト プロジェクトを作成しました。
私のモデルクラス
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 つのプロパティを持つモデル クラスがあります。1 つ目は必須に設定され、2 つ目はリモート検証です。アクション メソッドを適切に作成したと思います。ブレークポイントをValidateProperty2
機能するように設定しましたが、呼び出されることはありません。
私も FireBug を使用しました。クライアント側がサーバー側を呼び出そうとさえしないのと同じことです。
ここのコードの何が問題になっていますか?
編集 1: 何かを得たと思います。リモート検証は、コントロール (テキスト ボックスなど) に値が含まれている場合にのみ起動します。空のコントロールが検証をトリガーすることはありません。私の場合、実際にはより複雑なロジックを実装しようとしています。コントロールテキストが空の場合でも (他のプロパティの値をチェックするために) 検証を実行する必要があります。それは可能ですか?