none
MVC - DataType RRS feed

  • Pergunta

  • Pessoal,

    Tenho uma aplicação web onde utilizo MVC 2, com o seguinte código:

    //Modelo
    public class TesteModels
    {
      [Required]
      [DataType(DataType.Text)]
      public string Usuario { get; set; }
    
      [Required]
      [DataType(DataType.Password)]
      public string Senha { get; set; }
    
      [Required]
      [DataType(DataType.MultilineText)]
      public string Obs{ get; set; }
    }
    
    
    //Controle
    public class TipoController : Controller
    {
      // GET: /Tipo/
    
      public ActionResult Index()
      {
        return View();
      }
    
      public ActionResult Teste()
      {
        return View();
      }
    
      [HttpPost]
      public ActionResult Teste(TesteModels modelo)
      {
        if (ModelState.IsValid)
        {
          return RedirectToAction("Index", "Home");
        }
    
        return View(modelo);
      }
    }
    
    //View
    <% using (Html.BeginForm()) {%>
      <%: Html.ValidationSummary(true) %>
    
      <fieldset>
        <legend>Fields</legend>
          
      <div class="editor-label">
        <%: Html.LabelFor(m => m.Usuario) %>
      </div>
      <div class="editor-field">
        <%: Html.TextBoxFor(m => m.Usuario) %>
        <%: Html.ValidationMessageFor(m => m.Usuario) %>
      </div>
          
      <div class="editor-label">
        <%: Html.LabelFor(m => m.Senha) %>
      </div>
      <div class="editor-field">
        <%: Html.TextBoxFor(m => m.Senha) %>
        <%: Html.ValidationMessageFor(m => m.Senha) %>
      </div>
    
      <div class="editor-label">
        <%: Html.LabelFor(m => m.Obs) %>
      </div>
      <div class="editor-field">
        <%: Html.TextBoxFor(m => m.Obs) %>
        <%: Html.ValidationMessageFor(m => m.Obs) %>
      </div>
          
        <p>
          <input type="submit" value="Create" />
        </p>
      </fieldset>
    
    <% } %>
    

    Mas quando carrego a pagina, os campos usuário, Senha e OBS não estão de acordo com o DataType configurado, todos estão como texto, mas o campo Senha deveria estar como password, e o Obs como multiline.

    O que devo fazer para que o campos fiquem de acordo com o DataType informado ?

    Abs,

    • Movido AndreAlvesLima quarta-feira, 23 de fevereiro de 2011 17:19 (De:.NET Development - Geral)
    sexta-feira, 4 de fevereiro de 2011 18:23

Respostas

  • Oi Daylon,

    Somente complementando a corretíssima resposta do Paulo, além de <%: Html.EditorForModel() %>, que monta todo o formulário para o seu Model, caso você use <%: Html.EditorFor() %> também ocorreria o que você deseja. O código da sua View ficaria assim (alterações em negrito):

    //View
    <% using (Html.BeginForm()) {%>
     <%: Html.ValidationSummary(true) %>
    
     <fieldset>
      <legend>Fields</legend>
       
     <div class="editor-label">
      <%: Html.LabelFor(m => m.Usuario) %>
     </div>
     <div class="editor-field">
      <%: Html.EditorFor(m => m.Usuario) %>
      <%: Html.ValidationMessageFor(m => m.Usuario) %>
     </div>
       
     <div class="editor-label">
      <%: Html.LabelFor(m => m.Senha) %>
     </div>
     <div class="editor-field">
      <%: Html.EditorFor(m => m.Senha) %>
      <%: Html.ValidationMessageFor(m => m.Senha) %>
     </div>
    
     <div class="editor-label">
      <%: Html.LabelFor(m => m.Obs) %>
     </div>
     <div class="editor-field">
      <%: Html.EditorFor(m => m.Obs) %>
      <%: Html.ValidationMessageFor(m => m.Obs) %>
     </div>
       
      <p>
       <input type="submit" value="Create" />
      </p>
     </fieldset>
    
    <% } %>


    Forte abraço,

    André Borges Medeiros
    MCT, MCPD, MCTS

    Procurando treinamento de ASP.NET MVC?

    >> Se a resposta solucionar sua dúvida, favor Votar como Útil
    quinta-feira, 24 de fevereiro de 2011 14:05
    Moderador
  • Olá, Daylon.

    O DataType das propriedades são usados somente quando você utiliza o método: <%: Html.EditorForModel() %> em uma View tipada para o modelo.

    No seu caso, apesar de você ter definido o DataType, você não está utilizando o recurso, pois você definiu o seu próprio layout para o modelo.

    Abraços,


    Paulo Castilho - www.paulocastilho.com.br
    quinta-feira, 24 de fevereiro de 2011 11:09

Todas as Respostas

  • Olá!

    Por favor poste sua duvida no forum de ASP.NET MVC em http://social.msdn.microsoft.com/Forums/pt-BR/mvcpt/threads

    Até lá!


    HJ
    sexta-feira, 4 de fevereiro de 2011 19:08
  • Prezado(a),

    Estou migrando seu post para o fórum de ASP.NET MVC.

    Por favor, das próximas vezes que tiver alguma dúvida relacionada a esse assunto, poste por lá.

    Obrigado pelo apoio.


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    quarta-feira, 23 de fevereiro de 2011 17:19
  • Olá, Daylon.

    O DataType das propriedades são usados somente quando você utiliza o método: <%: Html.EditorForModel() %> em uma View tipada para o modelo.

    No seu caso, apesar de você ter definido o DataType, você não está utilizando o recurso, pois você definiu o seu próprio layout para o modelo.

    Abraços,


    Paulo Castilho - www.paulocastilho.com.br
    quinta-feira, 24 de fevereiro de 2011 11:09
  • Oi Daylon,

    Somente complementando a corretíssima resposta do Paulo, além de <%: Html.EditorForModel() %>, que monta todo o formulário para o seu Model, caso você use <%: Html.EditorFor() %> também ocorreria o que você deseja. O código da sua View ficaria assim (alterações em negrito):

    //View
    <% using (Html.BeginForm()) {%>
     <%: Html.ValidationSummary(true) %>
    
     <fieldset>
      <legend>Fields</legend>
       
     <div class="editor-label">
      <%: Html.LabelFor(m => m.Usuario) %>
     </div>
     <div class="editor-field">
      <%: Html.EditorFor(m => m.Usuario) %>
      <%: Html.ValidationMessageFor(m => m.Usuario) %>
     </div>
       
     <div class="editor-label">
      <%: Html.LabelFor(m => m.Senha) %>
     </div>
     <div class="editor-field">
      <%: Html.EditorFor(m => m.Senha) %>
      <%: Html.ValidationMessageFor(m => m.Senha) %>
     </div>
    
     <div class="editor-label">
      <%: Html.LabelFor(m => m.Obs) %>
     </div>
     <div class="editor-field">
      <%: Html.EditorFor(m => m.Obs) %>
      <%: Html.ValidationMessageFor(m => m.Obs) %>
     </div>
       
      <p>
       <input type="submit" value="Create" />
      </p>
     </fieldset>
    
    <% } %>


    Forte abraço,

    André Borges Medeiros
    MCT, MCPD, MCTS

    Procurando treinamento de ASP.NET MVC?

    >> Se a resposta solucionar sua dúvida, favor Votar como Útil
    quinta-feira, 24 de fevereiro de 2011 14:05
    Moderador