Asp.net mvc ASP.NET MVC3远程验证未输出错误消息

Asp.net mvc ASP.NET MVC3远程验证未输出错误消息,asp.net-mvc,validation,asp.net-mvc-3,jquery-validate,Asp.net Mvc,Validation,Asp.net Mvc 3,Jquery Validate,我有一个简单的模型,它是默认的RegisterModel,在为Create创建基于该模型的视图时,我最终得到了 public class RegisterModel { [Required] [Remote("UserNameExists", "Account", "", ErrorMessage = "Username is already taken.")] [Display(Name = "Username (spaces will be stripped, mus

我有一个简单的模型,它是默认的
RegisterModel
,在为
Create
创建基于该模型的视图时,我最终得到了

public class RegisterModel
{
    [Required]
    [Remote("UserNameExists", "Account", "", ErrorMessage = "Username is already taken.")]
    [Display(Name = "Username (spaces will be stripped, must be at least 6 characters long)")]
    public string UserName { get; set; }

    [Required]
    [Editable(true)]
    [Display(Name = "First and Last name")]
    public string Name { get; set; }

    [Required]
    [DataType(DataType.EmailAddress, ErrorMessage = "You need to enter a valid email")]
    [Remote("EmailExists", "Account", "", ErrorMessage = "Email is already taken.")]
    [Display(Name = "Email address")]
    public string Email { get; set; }

    //[Required]
    //[ValidatePasswordLength]
    [DataType(DataType.Password)]
    [Display(Name = "Create a password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Verify password")]
    //[Compare("Password", ErrorMessage = "Password's do not match.")]
    public string ConfirmPassword { get; set; }
}
并且认为:

<h3>
    Details</h3>
@using (Html.BeginForm("GenerateBetaLink", "Account", FormMethod.Post, new { @id = "beta-user" }))
{
    @Html.ValidationSummary(true)
    <div>
        <div class="editor-label">
            @Html.LabelFor(model => model.UserName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserName) 
            @Html.ValidationMessageFor(model => model.UserName)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name) 
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Email)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Email) 
            @Html.ValidationMessageFor(model => model.Email)
        </div>
        <p>
            &nbsp;</p>
        <p>
            <input type="submit" value="Create Beta User" class="btn-submit" />
            <span class="loading"></span>
        </p>
    </div>
}
我的问题是远程验证确实启动了,但是没有将任何内容写入错误消息,而且jQuery方法
.valid()
一直告诉我表单有效


(来源:)

我错过了什么


显示了相同的代码(在可下载文件中)

以下代码对我来说很好:

型号:

public class RegisterModel
{
    [Required]
    [DataType(DataType.EmailAddress, ErrorMessage = "You need to enter a valid email")]
    [Remote("EmailExists", "Home", "")]
    [Display(Name = "Email address")]
    public string Email { get; set; }
}
控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(RegisterModel model)
    {
        return View(model);
    }

    public ActionResult EmailExists(string email)
    {
        if ((email ?? string.Empty).Contains("foo"))
        {
            return Json(email + " is not available", JsonRequestBehavior.AllowGet);
        }

        return Json(true, JsonRequestBehavior.AllowGet);
    }
}
视图:

@model RegisterModel
@使用(Html.BeginForm())
{
@LabelFor(model=>model.Email)
@EditorFor(model=>model.Email)
@Html.ValidationMessageFor(model=>model.Email)
}

我也遇到了同样的问题,通过更新到最新的jQuery(1.6)和jQuery.validate(1.8)库解决了这个问题。获取这些信息的最简单方法是在NuGet中搜索jQuery。

Dang,我的根本无法工作:(my
ValidationMessageFor
在那里,但它从未被填充过……我在控制台中看不到javascript错误,只是……不知道(是的,如果你想知道的话,我的视图中确实有validate.js和unobtrusive.js文件):/@balexandre,您的控制器操作看起来如何?刚刚添加到问题中,但效果很好,因为它正在传递正确的值,正如您在FireBug控制台中看到的那样……我只是用电子邮件创建了一个简单的视图,但我仍然无法获得验证消息:(@balexandre,这很奇怪,因为我无法重现这种行为。它对我很有效。如果你通过电子邮件向我发送一个项目的缩小版本来说明问题,我会很乐意查看它,看看可能是什么问题。哦,需要检查的一件事是,你使用的jquery版本是否与您正在使用的jquery.validate插件的版本。IIRC在jquery 1.5和更早版本的验证插件中出现了一些问题。@Darin正在使用jquery 1.5.2和validation 1.8。请尝试此链接以查看我正在执行的操作的屏幕广播:
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(RegisterModel model)
    {
        return View(model);
    }

    public ActionResult EmailExists(string email)
    {
        if ((email ?? string.Empty).Contains("foo"))
        {
            return Json(email + " is not available", JsonRequestBehavior.AllowGet);
        }

        return Json(true, JsonRequestBehavior.AllowGet);
    }
}
@model RegisterModel

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

@using (Html.BeginForm())
{
    @Html.LabelFor(model => model.Email)
    @Html.EditorFor(model => model.Email) 
    @Html.ValidationMessageFor(model => model.Email)
    <input type="submit" value="OK" />
}