As compilações de visualização do Asp.Net MVC 2.0 fornecem ajudantes como
Html.EditorFor(c => c.propertyname)
Se o nome da propriedade for string, o código acima renderiza um texbox.
E se eu quiser passar as propriedades MaxLength e Size para a caixa de texto ou minha própria propriedade de classe css?
Preciso criar um modelo para cada combinação de tamanho e comprimento em meu aplicativo? Nesse caso, isso não torna os modelos padrão tão utilizáveis.
c#
asp.net-mvc
asp.net-mvc-2
Chandmk
fonte
fonte
Resolvi isso criando um EditorTemplate chamado String.ascx na minha pasta / Views / Shared / EditorTemplates:
Na minha opinião, eu uso
Funciona como um encanto para mim!
fonte
Nenhuma das respostas neste ou em qualquer outro tópico sobre configuração de atributos HTML para @ Html.EditorFor foi de muita ajuda para mim. No entanto, encontrei uma ótima resposta em
Estilizando um ajudante @ Html.EditorFor
Usei a mesma abordagem e funcionou perfeitamente sem escrever muito código extra. Observe que o atributo id da saída html de Html.EditorFor está definido. O código de visualização
A propriedade do modelo com anotação de dados e formatação de data como "dd MMM aaaa"
Funcionou como um encanto sem escrever muito código extra. Esta resposta usa ASP.NET MVC 3 Razor C #.
fonte
Talvez você queira dar uma olhada na postagem do blog de Kiran Chand , ele usa metadados personalizados no modelo de visualização, como:
Isso é combinado com modelos personalizados que fazem uso dos metadados. Uma abordagem limpa e simples, em minha opinião, mas gostaria de ver esse caso de uso comum integrado ao mvc.
fonte
EditorFor
passando-os como:new { htmlAttributes: { @class = "yourclass" } }
Estou surpreso que ninguém mencionou transmiti-lo em "additionalViewData" e lê-lo no outro lado.
Ver (com quebras de linha, para maior clareza):
Modelo de editor:
fonte
O problema é que seu modelo pode conter vários elementos HTML, então MVC não saberá a qual deles aplicar seu tamanho / classe. Você terá que definir você mesmo.
Faça seu modelo derivar de sua própria classe chamada TextBoxViewModel:
}
No modelo, você pode fazer isso:
Em sua opinião, você:
A primeira forma irá renderizar o template padrão para string. O segundo formulário irá renderizar o modelo personalizado.
A sintaxe alternativa usa interface fluente:
}
Observe que em vez de fazer isso na visualização, você também pode fazer isso no controlador, ou muito melhor no ViewModel:
Observe também que você pode fazer a classe TemplateViewModel base - um terreno comum para todos os seus modelos de visualização - que conterá suporte básico para atributos / etc.
Mas, em geral, acho que MVC v2 precisa de uma solução melhor. Ainda é Beta - vá pedir ;-)
fonte
Acho que usar CSS é o caminho a percorrer. Eu gostaria de poder fazer mais com a codificação .NET, como em XAML, mas no navegador CSS é rei.
Site.css
.cshtml
Joe
fonte
EditorFor
modelo. Estou usando MVC4 e funcionou muito bem.Como no MVC 5, se você deseja adicionar quaisquer atributos, você pode simplesmente fazer
Informações encontradas neste blog
fonte
Você pode definir atributos para suas propriedades.
Isso é conhecido como
System.ComponentModel.DataAnnotations
. Se você não consegue encontrar oValidationAttribute
que precisa, sempre poderá definir atributos personalizados.Atenciosamente, Carlos
fonte
Esta pode não ser a solução mais inteligente, mas é direta. Você pode escrever uma extensão para a classe HtmlHelper.EditorFor. Nessa extensão, você pode fornecer um parâmetro de opções que gravará as opções no ViewData para o auxiliar. Aqui estão alguns códigos:
Primeiro, o método de extensão:
A seguir, o objeto de opções:
E, finalmente, aqui está a linha do modelo String.ascx:
Francamente, acho que isso é direto e claro para a pobre alma que precisa manter seu código no futuro. E é fácil estender para vários outros bits de informação que você gostaria de passar para seus modelos. Está funcionando bem até agora para mim em um projeto em que estou tentando envolver o máximo que posso em um conjunto de modelos para ajudar a padronizar o html circundante, a la http://bradwilson.typepad.com/blog/2009/ 10 / aspnet-mvc-2-templates-part-5-master-page-templates.html .
fonte
Escrevi uma entrada de blog para responder minha própria pergunta
Adicionando suporte a atributos de html para modelos - ASP.Net MVC 2.0 Beta
fonte
Não sei por que não funciona para Html.EditorFor, mas tentei TextBoxFor e funcionou para mim.
... e também trabalhos de validação.
fonte
@class = "className"
Na minha prática, descobri que é melhor usar EditorTemplates com apenas um HtmlHelper nele - TextBox na maioria dos casos. Se eu quiser um modelo para uma estrutura html mais complexa, vou escrever um HtmlHelper separado.
Dado que podemos colar todo o objeto ViewData no lugar de htmlAttributes do TextBox. Além disso, podemos escrever alguns códigos de personalização para algumas das propriedades do ViewData se precisarem de tratamento especial:
Abaixo estão os exemplos da sintaxe na visualização e no html gerado:
fonte
Porque a questão é para EditorFor não TextBoxFor a sugestão de WEFX não funciona.
Para alterar as caixas de entrada individuais, você pode processar a saída do método EditorFor:
Também é possível alterar TODOS os seus EditorFors, visto que o MVC define a classe das caixas de texto EditorFor com .text-box , portanto, você pode simplesmente substituir este estilo, em sua folha de estilo ou na página.
Além disso, você pode definir o estilo para
fonte
Eu também tive problemas com a configuração da largura de TextBox em MVC3, enquanto a configuração do atributo Clsss funcionou para o controle TextArea, mas não para o controle TextBoxFor ou EditorFor:
Tentei seguir e funcionou para mim:
@ Html.TextBoxFor (model => model.Title, new {Class = "textBox", style = "width: 90%;"})
também neste caso as validações estão funcionando perfeitamente.
fonte
Uma maneira de contornar isso é ter delegados no modelo de visualização para lidar com a impressão de renderizações especiais como esta. Eu fiz isso para uma classe de paginação, exponho uma propriedade pública no modelo
Func<int, string> RenderUrl
para lidar com isso.Portanto, defina como o bit personalizado será escrito:
Envie a visualização para a
Paging
classe:... e para a
Paging
visão real :Isso pode ser visto como uma coisa complicada demais, mas eu uso esses pagers em todos os lugares e não suportava ver o mesmo código clichê para renderizá-los.
fonte
ATUALIZAÇÃO: hm, obviamente isso não funcionará porque o modelo é passado por valor para que os atributos não sejam preservados; mas deixo esta resposta como uma ideia.
Outra solução, eu acho, seria adicionar seus próprios ajudantes TextBox / etc, que verificarão seus próprios atributos no modelo.
Este é mais fácil, mas não tão conveniente / flexível.
fonte
Esta é a maneira mais limpa e elegante / simples de obter uma solução aqui.
Postagem de blog brilhante e nenhum exagero confuso em escrever métodos de extensão / auxiliar personalizados como um professor maluco.
http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx
fonte
Eu realmente gostei da resposta de @tjeerdans que utiliza o EditorTemplate chamado String.ascx na pasta / Views / Shared / EditorTemplates. Parece ser a resposta mais direta a essa pergunta. No entanto, eu queria um modelo usando a sintaxe do Razor. Além disso, parece que MVC3 usa o modelo String como padrão (consulte a questão StackOverflow "O modelo de exibição mvc para strings é usado para inteiros "), então você precisa definir o modelo para objeto em vez de string. Meu modelo parece estar funcionando até agora:
fonte
Eu resolvi !!
Para Razor, a sintaxe é:
@Html.TextAreaFor(m=>m.Address, new { style="Width:174px" })
isto ajusta a largura da área de texto para a largura que eu defini no parâmetro de estilo.Para ASPx, a sintaxe é:
<%=Html.TextAreaFor(m => m.Description, new { cols = "20", rows = "15", style="Width:174px" })%>
isso fará o truque
fonte