Validate.unobtrusive和Validate jQuery库

Validate.unobtrusive和Validate jQuery库,jquery,asp.net-mvc-3,Jquery,Asp.net Mvc 3,我正在构建一个MVC3应用程序,它使用标准模型验证属性进行基本的客户端和服务器验证。不过,我还有一个表单,它位于标题中,并使用jQuery验证插件执行客户端验证 当我将不引人注目的库添加到项目中时,使用validate插件的标题表单无法运行并继续发布。当不包括不引人注目的库时,标头将进行良好的验证,但随后模型验证将停止 知道我做错了什么吗 编辑 基本上,我在标题中有一个登录表单。我还有一个允许登录的登录页面。登录页面绑定到一个模型,但标题中的表单不是,它只是html。这两种表单都通过jQuery

我正在构建一个MVC3应用程序,它使用标准模型验证属性进行基本的客户端和服务器验证。不过,我还有一个表单,它位于标题中,并使用jQuery验证插件执行客户端验证

当我将不引人注目的库添加到项目中时,使用validate插件的标题表单无法运行并继续发布。当不包括不引人注目的库时,标头将进行良好的验证,但随后模型验证将停止

知道我做错了什么吗

编辑

基本上,我在标题中有一个登录表单。我还有一个允许登录的登录页面。登录页面绑定到一个模型,但标题中的表单不是,它只是html。这两种表单都通过jQuery.ajax调用相同的控制器/操作

我已经失去了使用.ajax方法的能力,因为我包含了不引人注目的库,所以它似乎没有被调用

我得到了你包含的代码,但在验证完成后,我仍然无法发布或执行操作

我的页眉表格是:

<form id="frmHeaderLogin" action="">
<table id="LoginBox" title="Login">
    <tr>
        <td>UserName</td>
        <td><input type="text" id="Username" name="Username" /></td>
    </tr>
    <tr>
        <td>Password</td>
        <td><input type="password" id="Password" name="Password" /></td>
    </tr>
    <tr>
    <td colspan="2"><input type="submit" value="Login" id="btnHeaderLogin" name="btnHeaderLogin" /></td>
    </tr>
</table>
</form>

如果要将Microsoft unobtrusive validation脚本与在同一页面中编写的自定义jquery验证规则混合使用,则需要将jquery验证规则添加到现有表单元素中。让我们举一个例子:

public class MyViewModel
{
    [Required]
    public string Foo { get; set; }

    public string Bar { get; set; }
}
控制器:

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

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }
}
视图:

@model MyViewModel
$(函数(){
$('#Bar')。规则('添加'{
要求:正确,
信息:{
必选:'需要酒吧'
}
});
});
@使用(Html.BeginForm())
{
@EditorFor(x=>x.Foo)
@Html.ValidationMessageFor(x=>x.Foo)
@EditorFor(x=>x.Bar)
@Html.ValidationMessageFor(x=>x.Bar)
好啊
}
注意Foo字段上的Required属性是如何使其成为必需的,我们已经为Bar字段定义了一个自定义jquery验证规则

以下是提交表单时的结果,两个字段保留为空:


当然,您可以在任何字段上定义任意数量的自定义规则。

Darin,我在标题中的表单不使用模型。它是一个标准HTML表单,有一个单击事件,调用jQuery验证,然后使用submitHandler发布。那还能用吗?正文中的表单具有相同的输入名称,但使用了一个模型。我没有尝试过,但我认为submitHandler可能无法工作,因为Ms unobtrusive已经劫持了提交处理程序。你能出示你的代码让我看到问题吗?另外,请将其缩小到最简单的示例。好的,您可以将
submitHandler
替换为
submit
subscription,表单为:
$('#formname').submit(函数(){if($(this.valid()){…将AJAX代码放在这里…}返回false;})。就规则而言,你可以按照我的回答来定义它们。现在你可以摆脱
.validate
调用了。嗨,达林,这就解决了问题。我还必须使用e.preventDefault()来防止出现默认的post。客户端和服务器验证现在可以工作了。
public class MyViewModel
{
    [Required]
    public string Foo { get; set; }

    public string Bar { get; set; }
}
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }

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

<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>
<script type="text/javascript">
    $(function () {
        $('#Bar').rules('add', {
            required: true,
            messages: {
                required: 'Bar is required'
            }
        });
    });
</script>

@using (Html.BeginForm())
{
    <div>
        @Html.EditorFor(x => x.Foo)
        @Html.ValidationMessageFor(x => x.Foo)
    </div>

    <div>
        @Html.EditorFor(x => x.Bar)
        @Html.ValidationMessageFor(x => x.Bar)
    </div>

    <button type="submit">OK</button>
}