【问题标题】:jQuery client side validation not working with MVC 3 MvcContrib.FluentHtmljQuery 客户端验证不适用于 MVC 3 MvcContrib.FluentHtml
【发布时间】:2011-02-14 17:49:35
【问题描述】:

使用 MVC 3 RTM 和 MvcContrib/FluentHtml 版本 3.0.51.0,我无法让 jQuery 客户端验证工作。服务器端验证工作正常,并返回显示正确的验证摘要等。但是当表单应该在客户端停止以显示验证错误时,它总是尝试点击服务器端 post 控制器操作。

对我缺少什么有任何想法吗?最新版的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>

View 页面继承自 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; }

【问题讨论】:

    标签: asp.net-mvc-3 validation client-side mvccontrib


    【解决方案1】:

    我想通了,肯定是 MvcContrib 搞砸了。我原本以为 MvcContrib 不是一个因素,因为当我从 MvcContrib 的 ModelViewPage 更改为 Mvc.ViewPage 时,我将“this.TextBox”切换为“Html.TextBox”,它仍然不起作用。但是,我刚刚发现我需要将控件切换到“Html.EditorFor”而不是“Html.TextBox”。

    我已经用谷歌搜索了几分钟,它看起来不像 MvcContrib 版本 3.0.51.0 支持使用任何等效于 EditorFor 的 jquery 客户端验证,所以我必须把它撕掉并使用本机 MVC 控件。

    您可以在此处查看包含我的方法的完整解决方案的文章:automatically-validate-and-format-data-with-asp-net-mvc-and-jquery

    【讨论】:

      【解决方案2】:

      刚刚遇到这个问题,看起来像Scott Kirkland has a solution

      【讨论】:

      • 我很久以前就从我的解决方案中删除了 MvcContrib,但感谢您发布此内容。我会将其标记为已解决。如果你想在不依赖 MvcContrib 的情况下看到我的方法的完整解决方案的文章,你可以在这里看到它:robertcorvus.com/…
      猜你喜欢
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多