我一直在使用内置的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中的错误吗?
答案 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>