1

問題を説明するために、非常に単純なテスト プロジェクトを作成しました。

私のモデルクラス

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: 何かを得たと思います。リモート検証は、コントロール (テキスト ボックスなど) に値が含まれている場合にのみ起動します。空のコントロールが検証をトリガーすることはありません。私の場合、実際にはより複雑なロジックを実装しようとしています。コントロールテキストが空の場合でも (他のプロパティの値をチェックするために) 検証を実行する必要があります。それは可能ですか?

4

2 に答える 2

0

問題は、最初に送信ボタンを押したときに検証が自動的に開始されないことです。ページの読み込み時に検証を開始して、送信時に必要になるたびに検証を開始する方法は次のとおりです。

「必須」検証属性がasp.net mvc 3で機能しない一方で、他の属性は機能します

于 2011-12-01T23:19:39.190 に答える
0

ここに mvc3 の作業バージョンがあります: http://completedevelopment.blogspot.com/2011/08/remote-ajax-validation-in-mvc3.html

d/l すると、ファイルを比較できます。

于 2011-12-01T20:38:46.353 に答える