繁体   English   中英

客户端验证只有一半有效,它适用于文本区域,而不适用于文本框

[英]Client side validation only half works, works for a textarea, not a textbox

让我开始解释我的情况。 现在,我的表单的服务器端验证有效,现在,我正在尝试使我的表单的客户端验证有效。 目前,我的表单同时具有文本框和文本区域,但是只有文本区域正在使用客户端验证,而我的文本框都没有。 如果我按下了提交按钮,则可以使用提琴手看到它仍在调用服务器来验证表单。 任何人都可以帮助我了解为什么客户端验证对我的文本区域有效,但对我的文本框无效。 我对asp.net和C#还是陌生的,因此对您的帮助将不胜感激。

到目前为止,我已经在几个站点上寻求帮助:

MVC 2客户端验证不起作用

客户端验证-Pietro Brambati的博客

Haacked.com-MVC 2自定义验证

Scott Gu的博客-模型验证

和其他一些我刚刚已经关闭的标签。 对于无法建立所有链接,我深感抱歉,但是由于这是我的第一篇博文,所以我只允许一个链接。 这是我的代码,

从母版页:

<script src="<%: Url.Content("~/Scripts/jquery-1.4.1.js") %>" type="text/javascript"></script>
<script src="<%: Url.Content("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript"></script>
<script src="<%: Url.Content("~/Scripts/MicrosoftMvcAjax.js") %>" type="text/javascript"></script>
<script src="<%: Url.Content("~/Scripts/MicrosoftMvcValidation.js") %>" type="text/javascript"></script>

从表格:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="HaveAQuestion.ascx.cs"
Inherits="ViewUserControl<HaveAQuestionViewModel>" %>
<% Html.EnableClientValidation(); %>
<div id="HaveAQuestion">
<%--<form method="post" action="<%= Url.Action("SendMessage", "Home") %>">--%>
<%using (Html.BeginForm("SendMessage", "Home", FormMethod.Post))
  {%>
<fieldset id="signin_menu" <% if (!ViewData.ModelState.IsValid) {%>
    style="display: block;"
<%} %> >
    <div style="padding: 25px">
        <div class="FieldTitle">
            First & Last Name
            <%=Html.ValidationMessageFor(a => a.Name)%>
            </div>
        <div class="FieldArea">
            <%--<input id="username" name="username" value="" class="Fields" title="username" type="text">--%>
            <%= Html.TextBox("name", Model.Name, new { id = "name", title = "name", @class = "Fields" })%>
        </div>
        <div class="FieldTitle">
            Phone
            <%=Html.ValidationMessageFor(a => a.Phone)%>
            </div>
        <div class="FieldArea">
            <%--<input id="username" name="username" value="" class="Fields" title="username" type="text">--%>
            <%= Html.TextBox("phone", Model.Phone, new { id = "phone", title = "phone", @class = "Fields" })%>
        </div>
        <div class="FieldTitle">
            Email
            <%=Html.ValidationMessageFor(a => a.Email)%>
         </div>
        <div class="FieldArea">
            <%--<input id="username" name="username" value="" class="Fields" title="username" type="text">--%>
            <%= Html.TextBox("email", Model.Email, new { id = "email", title = "email", @class = "Fields" })%>
        </div>
        <div class="FieldTitle">
            Comments/Questions
            <%=Html.ValidationMessageFor(a => a.CommentsOrQuestions)%>
            </div>
        <div class="TextArea">
            <%= Html.TextArea("CommentsOrQuestions", Model.CommentsOrQuestions, 4, 100, new { id = "CommentsOrQuestions", title = "comments", @class = "TextAreaField" })%>
        </div>
        <div style="padding-top: 10px">           
            <%= Html.ValidationMessage("error")%>
            <% if (!ViewData.ModelState.IsValid)
               {%><br /><%} %>                
            <input type="submit" value="Submit"/>
        </div>
</fieldset>
<%} %>
<%--</form>--%>

视图模型代码(如您所见,第一个[Required]标签中包含AllowEmptyString,这是我从另一篇文章中读到的,并向您显示我已对其进行测试):

public class HaveAQuestionViewModel
{
    [Required(AllowEmptyStrings = false, ErrorMessage = "*")]
    public string Name { get; set; }

    [Required(ErrorMessage = "*")]
    //this is my own regular expression that I created
    [RegularExpression("^[a-zA-Z0-9]+[\\.a-zA-Z0-9_]*[@][.a-zA-Z0-9]+[.]([a-z]{2,4})$", ErrorMessage = "*")]

    public string Email { get; set; }

    [Required(ErrorMessage = "*")]
    // Will take ddd-ddd-dddd or (ddd)ddd-dddd, or (ddd)-ddd-dddd
    [RegularExpression("[(]*([0-9]{3})[)]*[-]*([0-9]{3})[-]([0-9]{4})$" , ErrorMessage = "*")]
    public string Phone { get; set; }

    [Required(ErrorMessage = "*")]
    public string CommentsOrQuestions { get; set; }
}

我的控制器(这无关紧要,因为它是要在客户端验证所有内容。

该脚本是从<%Html.EnableClientValidation();生成的; %>

<script type="text/javascript">
//<![CDATA[
if (!window.mvcClientValidationMetadata) 
{ window.mvcClientValidationMetadata = []; }
window.mvcClientValidationMetadata.push(
{"Fields":[{"FieldName":"Name","ReplaceValidationMessageContents":true,
"ValidationMessageId":"Name_validationMessage",
"ValidationRules":[{"ErrorMessage":"*","ValidationParameters":    },"ValidationType":"required"}]},
{"FieldName":"Phone","ReplaceValidationMessageContents":true,
"ValidationMessageId":"Phone_validationMessage",
"ValidationRules":[{"ErrorMessage":"*","ValidationParameters":{"pattern":"[(]*([0-9]  {3})[)]*[-]*([0-9]{3})[-]([0-9]{4})$"},
"ValidationType":"regularExpression"},
{"ErrorMessage":"*","ValidationParameters":{},"ValidationType":"required"}]},
{"FieldName":"Email","ReplaceValidationMessageContents":true,
"ValidationMessageId":"Email_validationMessage",
"ValidationRules":[{"ErrorMessage":"*","ValidationParameters":{"pattern":"^[a-zA-Z0-9]+[\\.a-zA-Z0-9_]*[@][.a-zA-Z0-9]+[.]([a-z]{2,4})$"},
"ValidationType":"regularExpression"},{"ErrorMessage":"*","ValidationParameters":{},
"ValidationType":"required"}]},
{"FieldName":"CommentsOrQuestions","ReplaceValidationMessageContents":true,
"ValidationMessageId":"CommentsOrQuestions_validationMessage",
"ValidationRules":[{"ErrorMessage":"*","ValidationParameters": {},"ValidationType":"required"}]},
{"FieldName":"error","ReplaceValidationMessageContents":true,
"ValidationMessageId":"error_validationMessage","ValidationRules":  []}],"FormId":"form0","ReplaceValidationSummary":false});
//]]>
</script>

请帮助我,我正在运行VS 2010,并使用ASP.NET MVC 2.0。 由于某些原因,文本区域将起作用,而我的所有文本框都不起作用。

尝试大写每个texbox的ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM