Позвольте мне начать с объяснения моей ситуации.Сейчас проверка на стороне сервера для моей формы работает, и теперь я пытаюсь заставить проверку на стороне клиента работать на мою форму.В настоящее время в моей форме есть текстовые поля и текстовое поле, но только текстовая область использует проверку на стороне клиента, ни одно из текстовых полей не используется.Если я нажму кнопку отправки, используя 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. По какой-то причине текстовая область будет работать, в то время как ни один из моих текстовых полей не работает.