使用MVC 3 RTM和MvcContrib / FluentHtml版本3.0.51.0,我无法让jQuery客户端验证工作。服务器端验证工作正常,并返回显示正确的验证摘要等。但是,当表单帖子应该在客户端停止显示验证错误时,表单总是会尝试点击服务器端后控制器操作。
我缺少什么想法?最新版本的MvcContrib / FluentHtml是否与jQuery客户端验证不兼容?
这是我的代码:
Web.config有:
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
Site.Master页面包含:
<script src="<%= Url.Content("~/Assets/JavaScript/jquery-1.4.4.min.js")%>" type="text/javascript"></script>
<script src="<%= Url.Content("~/Assets/JavaScript/jquery-ui-1.8.7.min.js")%>" type="text/javascript"></script>
<script src="<%= Url.Content("~/Assets/JavaScript/jquery.validate.min.js")%>" type="text/javascript"></script>
<script src="<%= Url.Content("~/Assets/JavaScript/jquery.validate.unobtrusive.min.js")%>" type="text/javascript"></script>
查看页面继承自MvcContrib的ModelViewPage: 这是视图页面:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="ModelViewPage<MaintainReferralAgencyDetailVM>" %>
<%@ Import Namespace="OASIS3G.Controllers" %>
<%@ Import Namespace="OASIS3G.ViewModels" %>
<%@ Import Namespace="JCDCHelper.Extension"%>
<%@ Import Namespace="MvcContrib.FluentHtml" %>
<%@ Import Namespace="System.Web.Mvc" %>
<%@ Import Namespace="System.Web.Mvc.Html" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm()) %>
<% { %>
<h1>Referral Agency Detail</h1>
<%= Html.ValidationSummary(false) %>
<table class="NoBorder">
<tr>
<td class="NoBorder SubmitFormLeftColumn"><span class="required">* </span>Zip Code:</td>
<td class="NoBorder"><%= this.TextBox(x => x.ReferralAgency.ContactInformation.Zipcode) %> Example: 99999 or 999990000
<%= Html.ValidationMessageFor(x=>x.ReferralAgency.ContactInformation.Zipcode) %>
</td>
</tr>
</table>
<input type="submit" value="Submit" />
<% } %>
</asp:Content>
这是控制器后期行动:
[HttpPost]
public ActionResult MaintainReferralAgencyDetail(MaintainReferralAgencyDetailVM userInputs)
{
// I shouldn't reach this when I submit the form with a blank Zipcode, but I do:
if (ModelState.IsValid)
{
这是具有必填字段的实体对象:
[Serializable]
public class ContactInformationEO
{
public virtual Int64 AddressId { get; set; }
[Required]
public virtual string Zipcode { get; set; }
答案 0 :(得分:2)
我想通了,肯定是MvcContrib搞砸了。我原本以为MvcContrib不是一个因素,因为当我从MvcContrib的ModelViewPage更改为Mvc.ViewPage时,我将“this.TextBox”切换为“Html.TextBox”,它仍然无效。但是,我刚刚发现我需要将控件切换为“Html.EditorFor”而不是“Html.TextBox”。
我用Google搜索了几分钟,看起来MvcContrib版本3.0.51.0支持使用任何等效的EditorFor进行jquery客户端验证,因此我必须将其删除并使用本机MVC控件。
您可以在此处查看包含我的方法的完整解决方案的文章:automatically-validate-and-format-data-with-asp-net-mvc-and-jquery
答案 1 :(得分:1)
刚刚遇到这个问题,看起来像Scott Kirkland has a solution。