Проверка на стороне клиента работает только наполовину, работает для текстовой области, а не для текстового поля - PullRequest
1 голос
/ 15 декабря 2010

Позвольте мне начать с объяснения моей ситуации.Сейчас проверка на стороне сервера для моей формы работает, и теперь я пытаюсь заставить проверку на стороне клиента работать на мою форму.В настоящее время в моей форме есть текстовые поля и текстовое поле, но только текстовая область использует проверку на стороне клиента, ни одно из текстовых полей не используется.Если я нажму кнопку отправки, используя fiddler, я вижу, что он все еще вызывает сервер для проверки формы.Может кто-нибудь, пожалуйста, помогите мне понять, почему проверка на стороне клиента будет работать для моей текстовой области, но не будет работать для моих текстовых полей.Я очень новичок в asp.net и C #, поэтому любая помощь будет принята с благодарностью.

Я уже обращался за помощью к нескольким сайтам:

MVC 2 Проверка на стороне клиентане работает

Проверка на стороне клиента - Блог Пьетро Брамбати

Haacked.com - Пользовательская проверка MVC 2

Блог Скотта Гу - Проверка модели

и несколько других, о которых я только что закрыл вкладки.Я извиняюсь за то, что не смог сделать их всеми ссылками, но так как это мой первый пост, мне разрешена только одна ссылка.Вот мой код,

С главной страницы:

<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. По какой-то причине текстовая область будет работать, в то время как ни один из моих текстовых полей не работает.

1 Ответ

1 голос
/ 15 декабря 2010

Попробуйте использовать заглавные буквы для каждого текстового поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...