Pergunta

Parece que não consigo obter a validação do lado do cliente funcionando em um aplicativo MVC 2 RC.

Meu modelo tem o seguinte:

public class ExampleModel
{
    [Required(ErrorMessage="Test1 is required")]
    [DisplayName("Test1")]
    public string Test1 { get; set; }

    [Required(ErrorMessage="Test2 is required")]
    [DisplayName("Test2")]
    public string Test2 { get; set; }
}

Minha visão tem o seguinte código:

<% Html.EnableClientValidation(); %>
<%= Html.ValidationSummary(true, "Test was unsuccessful.") %>    
<% using (Html.BeginForm()) { %>
<div>
    <div class="editor-label">Test1:</div>
    <div class="editor-field">
        <%= Html.TextBoxFor(m => m.Test1) %>
        <%= Html.ValidationMessageFor(m => m.Test1) %>
    </div>

    <div class="editor-label">Test2:</div>
    <div class="editor-field">
        <%= Html.TextBoxFor(m => m.Test2) %>
        <%= Html.ValidationMessageFor(m => m.Test2) %>
    </div>

    <p>
        <input type="submit" value="Test" />
    </p>
</div>

Deixo em branco os dois campos e clico no botão de teste e ele vai direto para o manipulador de correios do controlador, sem validação do lado do cliente acontecendo. Não tenho certeza do que estou perdendo.

Eu tenho o seguinte JavaScript também incluído na visualização (não tenho certeza se eu preciso de tudo):

<link href="../../Scripts/jquery-1.3.2.min.js" type="text/javascript" />
<link href="../../Scripts/jquery.validate.min.js" type="text/javascript" />    
<link href="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript" /> 

Qualquer idéia do que estou fazendo de errado. Sinto que estou perdendo algo simples e a documentação para o MVC 2 é escassa.

Editar: Eu adicionei o link:

<link href="../../Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" />

E incluí o arquivo no meu projeto, do qual tive que baixar o On of the Links nas respostas. Ainda não está funcionando. Alguma outra idéia?

Editar: Estou usando o Visual Studio 2008 com o MVC 2 RC (não beta) e estou procurando qualquer exemplo de download ou publicado de validação do lado do cliente trabalhando com a versão do RC.

Foi útil?

Solução 2

Ok, eu descobri isso ... e é 100% minha culpa. Embora algumas das postagens incluíssem algumas informações que eu precisava também.

O principal problema, que estou surpreso, ninguém notou, foi o meu HTML para incluir os scripts ... olhe para o meu post e veja se você pode ver o problema.

Eu estava usando um <link href=... tag em vez do adequado <script src=... marcação. Totalmente minha culpa, pois eu havia cortado rapidamente e colei o link CSS sem pensar e apenas mudei o tipo e o arquivo. Duh !!!

De qualquer forma, os links corretos necessários são:

<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>

Tudo funciona então. Você definitivamente precisa incluir o arquivo 'MicrosoftMVCJQueryValidation.js' do Projeto Futures, para que eu tenha votado todas as postagens que mencionaram isso.

Fora da caixa, embora esse arquivo não esteja incluído. Se você não estiver preocupado em usar o jQuery, você pode usar o seguinte inclui usar a implementação da Microsoft, que funcionará pronta para a caixa com o RC:

<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>    

Espero poder economizar pelo menos uma pessoa com alguma dor ... Ainda não posso acreditar em como poderia ter estragado a inclusão e não notei por muito tempo.

Obrigado novamente por toda a sua ajuda.

Outras dicas

Quando você atualiza o projeto do MVC 2 beta, use: /src/MvcFutures/MicrosoftMvcJQueryValidation.js Do pacote de código -fonte MVC 2 RC (link). A versão beta mais antiga não funciona corretamente com o jQuery.Validação no RC. Os arquivos JavaScript necessários são:

<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript" />
<script src="/Scripts/jquery.validate.min-vsdoc.js" type="text/javascript" />
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" />

A versão correta do microsoftmvcjqueryValidation.js contém isso $ (documento) .ready () função:

// need to wait for the document to signal that it is ready
$(document).ready(function() {
    var allFormOptions = window.mvcClientValidationMetadata;
    if (allFormOptions) {
        while (allFormOptions.length > 0) {
            var thisFormOptions = allFormOptions.pop();
            __MVC_EnableClientValidation(thisFormOptions);
        }
    }
});

No final do arquivo (na versão RC).

Você tem que incluir MicrosoftMVCJQueryValidation.js Arquivo :

<link href="MicrosoftMvcJQueryValidation.js" type="text/javascript" />

Verifique isso: Onde está a versão certa do microsoftmvcjQueryValidation.js para MVC 2 beta 2?

Em seguida, basta colocar Html.EnableClientValidation(); em algum lugar na página de exibição. Isto devo estar antes do primeiro formulário que você deseja validar do lado do cliente. eu prefiro Site.master página.

Trabalhando no ASP.NET MVC 2 RC.

Tem certeza de que incluiu os arquivos JS corretos? Porque em Postagem de Phill Haack tem MicrosoftMvcJQueryValidation.js anexado em vez de MicrosoftMvcValidation.js.

Ele também define o ClientValidationFunction propriedade na vista:

<% ViewContext.FormContext.ClientValidationFunction 
= "EnableClientValidation"; %>

Embora isso não fosse RC, mas beta.

O sistema de validação padrão (e suportado pela Microsoft) no candidato de liberação do ASP.NET MVC 2 não usa o JQuery Validate. Em vez disso, ele usa um novo sistema de validação que existe inteiramente no MicrosoftMVCValidation.js (embora você também precise incluir microsoftajax.js).

Se você deseja usar a biblioteca JQuery Validate, ela é incluída como parte do projeto Futures do ASP.NET MVC (disponível aqui), que é um download separado e possui seu próprio arquivo de script adaptador.

Além disso, sobre o Html.ValidationSummary() Helper, acredito que ele precisa ser incluído dentro do formulário, se você deseja que ele tenha a nova funcionalidade do lado do cliente. Ainda funcionará se estiver fora do formulário, mas só funcionará no lado do servidor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top