MVC3 jQuery.validate在提交表单时无法正常工作

时间:2011-09-23 14:45:02

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

我一直在使用内置的jquery验证在MVC3中工作。

除非我提交实际表单,否则在浏览字段时似乎确实有客户验证工作。

以下是我的包含脚本:

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

我设法通过将jquery版本恢复为jquery-1.4.4.min.js来解决这个问题所以我只是想知道:

jquery不向后兼容吗?另外 - 为什么验证确实有效但输入提交时失败?

这可能是新版jQuery中的错误吗?

3 个答案:

答案 0 :(得分:2)

起初我觉得jQuery 1.6会破坏兼容性。事实证明,让我看起来不那么引人注目的验证工作只是有点棘手。这是一个很好的教程,可以让你找到一个有效的例子:

http://www.asp.net/mvc/tutorials/creating-a-mvc-3-application-with-razor-and-unobtrusive-javascript

然后你可以切换到jquery 1.6.2并看到它仍在工作。对我来说,我几乎完全相同的观点中缺少的是Html.BeginForm。一旦我补充说,一切都开始有效了。

答案 1 :(得分:1)

我认为这是一个错误,没有解决方案。

答案 2 :(得分:0)

表格发布了吗?如果不是,您可能有违反的验证规则,但如果您没有启用Html.ValidationSummary或​​Html.ValidationMessageFor,则可能看不到错误消息。

**编辑:

我尝试使用最新版本的jQuery(1.6.4)和1.6.2使用此代码,没有任何问题。

控制器代码

public class TestViewModel
{
    [Required]
    public string textTest { get; set; }

[Required]
public int intTest { get; set; }
}

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new TestViewModel());
    }
[HttpPost]
public ActionResult Index(TestViewModel model)
{
    if (ModelState.IsValid)
    {
        return Redirect("http://www.yahoo.com");
    }
    return View(model);
}

}

标记

@model MvcApplication39.Controllers.TestViewModel

@{
    ViewBag.Title = "Index";
}

<h2>ViewBag.Title</h2>

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.min.js" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>TestViewModel</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.textTest)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.textTest)
            @Html.ValidationMessageFor(model => model.textTest)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.intTest)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.intTest)
            @Html.ValidationMessageFor(model => model.intTest)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>