簡體   English   中英

ASP.NET MVC 3中的遠程驗證問題

[英]Problem with remote validation in asp.net mvc 3

我有一個人物模型

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應用程序是一個好習慣。)

請參閱我的MSDN文章如何:在ASP.NET MVC中實現遠程驗證我在禁用JavaScript的情況下,使用HttpPost Create方法中的遠程客戶端驗證代碼來測試服務器端。

[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);
        }

您必須在服務器上復制一個驗證調用-根據我的測試,該調用不起作用。 請參閱我的文章: ASP.NET MVC 3中的DRY遠程驗證

聽起來您已禁用了JavaScript,並且遠程驗證失敗。

遠程驗證需要在瀏覽器中啟用JavaScript。 它使用jQuery和AJAX調用來完成此任務。

MSDN的報價正是您正在觀察的內容:

您沒有看到驗證錯誤

提交表單時執行服務器端驗證

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM