FormElement é nulo com a validação do cliente MVC
-
24-09-2019 - |
Pergunta
Estou recebendo um "FormElement é nulo" ao tentar usar a validação do cliente MVC. Alguém tem alguma opinião sobre o que poderia ser o problema?
Sys.mvc.numberValidator.create = function (regra) {return function.createlegate (new sys.mvc.numberValidator (), new sys.mvc.numberValidator (). Validate);}
Aqui está o meu modelo:
public class EmailViewModel
{
///
/// The user's current email address
///
public string CurrentEmailAddress { get; set; }
///
/// User's new email address
///
[EmailAddress( IsRequired = true, ErrorMessage = "Please enter a valid email address." )]
public string NewEmailAddress { get; set; }
///
/// User's confirmed new email address
///
[EmailAddress( IsRequired = true, ErrorMessage = "Please enter a valid email address. Your emails do not match." )]
public string ConfirmNewEmailAddress { get; set; }
public EmailViewModel()
{
CurrentEmailAddress = "Michael.l.paterson@gmail.com";
NewEmailAddress = string.Empty;
ConfirmNewEmailAddress = string.Empty;
}
}
E aqui estão as referências de script da página mestre:
Microsoftajax.js
Microsoftmvcajax.js
Microsoftmvcvalidation.js
Não tenho certeza se tudo isso aparecerá, mas aqui está o código de visualização:
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
<%= Html.ValidationSummary( true, "There was an error when processing your request" ) %>
<% Html.EnableClientValidation(); %>
<% Html.BeginForm(); %>
<div class="SecureForm_Wrapper">
<label class="Styled">
<img alt="Reqired" src="../../Content/Images/Misc/required.png" />
New E-Mail</label>
<div class="TheField">
<%= Html.TextBoxFor( m => m.NewEmailAddress, new { id = "NewEmailAddress", name = "NewEmailAddress", @class = "CommonTextBox" } ) %>
<%= Html.ValidationMessageFor( m => m.NewEmailAddress ) %>
</div>
</div>
<div class="SecureForm_Wrapper">
<label class="Styled">
<img alt="Reqired" src="../../Content/Images/Misc/required.png" />
Confirm New E-Mail</label>
<div class="TheField">
<%= Html.TextBoxFor( m => m.ConfirmNewEmailAddress, new { id = "ConfirmNewEmailAddress", name = "ConfirmNewEmailAddress", @class = "CommonTextBox" } )%>
<%= Html.ValidationMessageFor( m => m.ConfirmNewEmailAddress ) %>
</div>
</div>
<div id="BottomButtonContainer">
<a class="button" href="#" id="SubmitButton" style="font-weight: bold;"><span>Save</span></a>
<a class="button" href="#" onclick="this.blur(); return false;"><span>Cancel</span>
</a>
</div>
<% Html.EndForm(); %>
E aqui está
Alguém tem alguma opinião sobre o que poderia ser o problema?
Solução
Quando altero seu modelo de visualização para usar os atributos necessários (e remover as propriedades isrequired), seu modelo de visualização e visualização parecem validar bem para mim. Eu também tive que adicionar um botão de envio ao seu formulário. Talvez o problema esteja na sua implementação do validador de e -mail?
Você pode ter mais cuidado com a formatação da sua pergunta, pois isso dificulta a análise. Para referência, aqui está o modelo de exibição e a visão limpa que estou usando que funciona.
Exibir modelo:
public class EmailViewModel
{
///
/// The user's current email address
///
public string CurrentEmailAddress { get; set; }
///
/// User's new email address
///
[Required(ErrorMessage = "Please enter a valid email address.")]
public string NewEmailAddress { get; set; }
///
/// User's confirmed new email address
///
[Required(ErrorMessage = "Please enter a valid email address. Your emails do not match.")]
public string ConfirmNewEmailAddress { get; set; }
public EmailViewModel()
{
CurrentEmailAddress = "Michael.l.paterson@gmail.com";
NewEmailAddress = string.Empty;
ConfirmNewEmailAddress = string.Empty;
}
}
Visão:
<%= Html.ValidationSummary( true, "There was an error when processing your request" ) %>
<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm())
{ %>
New E-Mail
<%= Html.TextBoxFor(m => m.NewEmailAddress)%>
<%= Html.ValidationMessageFor(m => m.NewEmailAddress)%>
<br />
Confirm New E-Mail
<%= Html.TextBoxFor(m => m.ConfirmNewEmailAddress)%>
<%= Html.ValidationMessageFor(m => m.ConfirmNewEmailAddress)%>
<br />
<input type="submit" value="Submit" />
<% } %>
<script src="<%= ResolveUrl("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript" language="javascript"></script>
<script src="<%= ResolveUrl("~/Scripts/MicrosoftMvcAjax.js") %>" type="text/javascript" language="javascript"></script>
<script src="<%= ResolveUrl("~/Scripts/MicrosoftMvcValidation.js") %>" type="text/javascript" language="javascript"></script>