0

私は人物モデルを持っています

public class Person
    {

        public int  ID { get; set; }
        [Required]
        [Remote("UserNameExists", "People", "Username is already taken.")]
        public string Name { get; set; }
        [Required]
        public string LastName { get; set; }



    }

これは私の UserNameExists メソッドです

public JsonResult UserNameExists(string name)
        {
            bool exists = personRepository.GetPersonByName(name.Trim());
            if (!exists)
                return Json(true, JsonRequestBehavior.AllowGet);

            return Json(string.Format("{0} is not avavfddvilable.", name),
                    JsonRequestBehavior.AllowGet);
        }

Javascript を有効にすると問題なく動作しますが、JavaScript を無効にするとこのルールは適用されません...

どうしてこれなの?

助けてください。

予想される動作の編集:

msdnによると、Javacriptがなくてもこのルールを尊重する必要があります

  1. 必要に応じて、ブラウザでクライアント スクリプトを無効にし、ページを再度実行して、検証の制約に違反するデータを入力します。

無効なデータを含むフィールドを離れても、スクリプトが無効になっているため、検証エラーは表示されません。ASP.NET MVC は目立たない JavaScript を使用しているため、クライアント側のスクリプト エラーは表示されません。ただし、フォームを送信すると、サーバー側の検証が実行されます。(スクリプトを無効にしたブラウザーで Web アプリケーションをテストすることをお勧めします。)

4

3 に答える 3

2

MSDN の記事「方法: ASP.NET MVC にリモート検証を実装する」を参照してください。HttpPost Create メソッドでリモート クライアント検証コードを使用して、JavaScript が無効になっているときにサーバー側をテストします。

[HttpPost]
    public ActionResult Create(CreateUserModel model) {

        // Verify user name for clients who have JavaScript disabled
        if (_repository.UserExists(model.UserName)) {
            ModelState.AddModelError("UserName", ValidationController.GetAltName(model.UserName, _repository));
            return View("Create", model);
        }
于 2011-05-06T23:07:25.653 に答える
1

サーバーで検証呼び出しを複製する必要があります-これは、私のテストで概説したようには機能しません。私の投稿を参照してください: ASP.NET MVC 3 での DRY リモート検証

于 2011-05-05T23:33:46.247 に答える
0

JavaScript が無効になっているようで、Remote Validation が失敗しています。

リモート検証では、ブラウザで JavaScript が有効になっている必要があります。これを行うには、jQuery と AJAX 呼び出しを使用します。

MSDN からの引用は、まさにあなたが観察しているものです。

検証エラーが表示されない

フォームを送信すると、サーバー側の検証が実行されます

于 2011-05-05T22:37:31.937 に答える