Área de texto com @ Html.EditorFor


209

Eu tenho o aplicativo ASP.NET MVC3 e também tenho um formulário para adicionar notícias. Quando o VS2010 criou a exibição padrão, tenho apenas entradas de texto para dados de sequência, mas quero ter uma área de texto para o texto de notícias. Como eu posso fazer isso com a sintaxe do Razor.

A entrada de texto fica assim:

@Html.EditorFor(model => model.Text)

Relacionado, consulte esta resposta para outra pergunta sobre como personalizar esse EditorTemplate.
Jeroen

Respostas:


375

Você pode usar o [DataType]atributo no seu modelo de exibição como este:

public class MyViewModel
{
    [DataType(DataType.MultilineText)]
    public string Text { get; set; }
}

e então você pode ter um controlador:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }
}

e uma visão que faz o que você deseja:

@model AppName.Models.MyViewModel
@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.Text)
    <input type="submit" value="OK" />
}

7
Praticamente o que eu estava procurando, mas e se eu precisar especificar os atributos html de linhas e colunas?
Jason

3
Ainda estou recebendo [class = "caixa de texto linha única"] no código fonte :(
Stavros

7
Extremamente experiente e ainda mantendo o mais simples possível e explica tudo passo a passo. saudar @Darin Dimitrov.
İsmet Alkan 04/04

@ Jason usa CSS para estilizar.
Jo Smo

DataAnnotationsftw! Obrigado.
Kon

136

Alguém perguntou sobre a adição de atributos (especificamente, 'linhas' e 'colunas'). Se você estiver usando o Razor, poderá fazer o seguinte:

@Html.TextAreaFor(model => model.Text, new { cols = 35, @rows = 3 })

Isso funciona para mim. O '@' é usado para escapar das palavras-chave, para que sejam tratadas como variáveis ​​/ propriedades.


De fato - se você deseja uma área de texto com colunas / linhas, há poucas razões para usar o EditorFor em vez de TextAreaFor. Alguém tem um motivo para você ainda precisar usar o EditorFor e sabe que precisa especificar colunas / linhas?
James Haug

95
@Html.TextAreaFor(model => model.Text)

6
Eu gosto mais desse método porque a resposta popular aqui envolve a modificação do modelo de banco de dados, o que significa que você deve eliminar e recriar o banco de dados subjacente se estiver usando o EntityFramework.
Ciaran Gallagher

6
Essa anotação DataType não força uma atualização no Entity Framework.
Tallmaris

9
@ Ciaran: Esta declaração deve tocar um sino. Nunca deve haver necessidade de alterar a camada do banco de dados para modificar a interface do usuário. Deve haver um objeto de apresentação, que é mapeador para o objeto de banco de dados. Nunca use o objeto de banco de dados na sua interface do usuário.
Frederik Prijck

5
Para ficar claro, o que Frederik está se referindo é a criação de classes que representam seus dados de exibição SEPARATE a partir de classes usadas no seu DbContext. Não passe seus modelos DbContext para as visualizações. Crie uma classe de modelo de visualização, depois mude as informações de que você gosta do modelo db para o modelo de visualização e vice-versa ao aceitar entradas.
21714 Jim Yarbro

3
@FrederikPrijck Não discordo, mas isso não viola o diretor da DRY? Você precisa copiar todas as propriedades de uma classe para outra. Existe algo menos "mundano" de fazer isso que você encontrou?
James Haug

1

Declare em seu modelo com

  [DataType(DataType.MultilineText)]
  public string urString { get; set; }

Então, em .cshtml, você pode usar o editor como abaixo. você pode usar @cols e @rows para o tamanho da área de texto

     @Html.EditorFor(model => model.urString, new { htmlAttributes = new { @class = "",@cols = 35, @rows = 3 } })

Obrigado !

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.