【问题标题】:asp.net mvc 3 Remote validation problemasp.net mvc 3 远程验证问题
【发布时间】:2011-07-31 02:43:20
【问题描述】:

这是我的模特:

    [Required(ErrorMessage = "Email required!")]
    [Remote("EmailExists","User",ErrorMessage = "Email already")]
    public virtual string Email { get; set; }

查看:

    @Html.TextBoxFor(x => x.Email)
    @Html.ValidationMessageFor(x => x.Email)

控制器:

    public ActionResult EmailExists(string Email)
    {
         return Json(!Email.Equals("teste@gmail.com"), 
                                      JsonRequestBehavior.AllowGet);
    }

jquery.validate.min.jsjquery.validate.unobtrusive.min.js 已添加。并且web.config 也被配置好了。

当我在电子邮件输入中键入时,它会触发 EmailExists 很好。也返回真/假。 但它从不显示错误消息

我得到了这个错误:

 Erro: uncaught exception: 
 [Exception... "Cannot modify properties of a WrappedNative"
 nsresult: "0x80570034 (NS_ERROR_XPC_CANT_MODIFY_PROP_ON_WN)"  
 location: "JS frame :: chrome://global/content/bindings/autocomplete.xml ::
 onxblpopuphiding :: line 848"  data: no]

有什么想法吗?

【问题讨论】:

    标签: asp.net-mvc validation asp.net-mvc-3


    【解决方案1】:

    您的描述中没有任何内容表明存在问题。我使用默认模板创建了一个新的 ASP.NET MVC 3 应用程序,添加了模型:

    public class MyViewModel
    {
        [Required(ErrorMessage = "Email required!")]
        [Remote("EmailExists", "Home", ErrorMessage = "Email already")]
        public string Email { get; set; }
    }
    

    更新了HomeController

    public class HomeController: Controller
    {
        public ActionResult Index()
        {
            return View(new MyViewModel());
        }
    
        [HttpPost]
        public ActionResult Index(MyViewModel model)
        {
            return View(model);
        }
    
        public ActionResult EmailExists(string Email)
        {
            return Json(
                !Email.Equals("teste@gmail.com"), 
                JsonRequestBehavior.AllowGet
            );
        }
    }
    

    ~/Views/Home/Index.cshtml 视图:

    @model AppName.Models.MyViewModel
    <script type="text/javascript" src="@Url.Content("~/scripts/jquery.validate.min.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/scripts/jquery.validate.unobtrusive.min.js")"></script>
    @using (Html.BeginForm())
    {
        @Html.LabelFor(x => x.Email)
        @Html.TextBoxFor(x => x.Email)
        @Html.ValidationMessageFor(x => x.Email)
        <input type="submit" value="OK" />
    }
    

    验证触发正常并显示正确的错误消息(使用 Chrome 10.0、IE9 和 FireFox 4.0 测试)。所以现在的问题是您的方案与这个方案有何不同?

    【讨论】:

    • 谢谢达林...我发现了问题...这是 jquery.validate 版本...我使用的是 jquery 1.5.1 和 jquery.validate 1.7...所以我更新到 1.8 和一切正常...
    【解决方案2】:

    你只需要这样做:

        [Required(ErrorMessage = "Email required!")]
        [Remote("EmailExists","User")]
        public virtual string Email { get; set; }
    

        public JsonResult EmailExists(string Email)
        {
            string errorMessage = "Email already";
            if (!Email.Equals("teste@gmail.com"))
                return Json(true, JsonRequestBehavior.AllowGet);
    
            return Json(errorMessage, JsonRequestBehavior.AllowGet);
        }
    

    【讨论】:

      猜你喜欢
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 2011-12-25
      相关资源
      最近更新 更多