Estou tentando adicionar uma classe a uma entrada.
Isto não está a funcionar:
@Html.EditorFor(x => x.Created, new { @class = "date" })
asp.net-mvc
asp.net-mvc-3
razor
user137348
fonte
fonte
Respostas:
Adicionar uma classe a
Html.EditorFor
não faz sentido, pois dentro do modelo você pode ter muitas tags diferentes. Então, você precisa atribuir a classe dentro do modelo do editor:e no modelo personalizado:
fonte
A partir do ASP.NET MVC 5.1,
EditorFor
é possível adicionar uma classe a um (a pergunta original especificava o ASP.NET MVC 3, e a resposta aceita ainda é a melhor com o considerado).Consulte: O que há de novo no ASP.NET MVC 5.1, suporte ao Bootstrap para modelos de editor
fonte
Você não pode definir a classe para o EditorFor genérico. Se você conhece o editor que deseja, pode usá-lo imediatamente, e aí pode definir a classe. Você não precisa criar modelos personalizados.
fonte
Você pode usar:
(Pelo menos com o ASP.NET MVC 5, mas não sei como foi o ASP.NET MVC 3.)
fonte
Eu tive o mesmo problema frustrante e não queria criar um EditorTemplate que se aplicasse a todos os valores de DateTime (havia momentos na minha interface do usuário em que eu queria exibir a hora e não um calendário suspenso da jQuery UI ). Na minha pesquisa, os principais problemas que encontrei foram:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
, mas não me permitia aplicar a classe "coletor de datas" personalizada.Portanto, criei a classe HtmlHelper personalizada que possui os seguintes benefícios:
Este método substitui isso por uma sequência vazia.
E para aqueles que desejam conhecer a sintaxe JQuery que procura objetos com a
date-picker
decoração da classe para renderizar o calendário, aqui está:fonte
DateTimePickerFor
e atualizando o campo de data do modelo com o qual você está representando[DataType(DataType.Date)]
ou[DataType(DataType.DateTime)]
? Você também pode colocá-lo no formato mm / dd / aaaa com.ParseFormats(new string[] { "MM/dd/yyyy" })
(ou modificá-lo para o que quiser, facilmente). Se for nulo, o campo não tornar tão vazio sem ter que código que no.@MyHtmlHelpers.CalenderTextBoxFor(model => model.ExpirationDate)
. Alguma idéia de como implementar isso?É possível fornecer uma classe ou outras informações através do AdditionalViewData - eu uso isso onde estou permitindo que um usuário crie um formulário com base nos campos do banco de dados (propertyName, editorType e editorClass).
Com base no seu exemplo inicial:
e no modelo personalizado:
fonte
Não há nenhuma
EditorFor
substituição que permita transmitir um objeto anônimo cujas propriedades seriam adicionadas de alguma forma como atributos em alguma tag, especialmente para os modelos de editor interno. Você precisaria escrever seu próprio modelo de editor personalizado e passar o valor desejado como dados de visualização adicionais.fonte
não permite que nenhum argumento seja passado para a caixa de texto
É assim que você pode aplicar atributos.
fonte
Usando o jQuery, você pode fazer isso facilmente:
Aqui está sua tag de entrada
Para o DropDownlist, você pode usar este:
Para o Dropdownlist:
fonte
Embora a questão tenha sido direcionada ao MVC 3.0, também encontramos o problema no MVC 4.0. O MVC 5.0 agora inclui nativamente uma sobrecarga para htmlAttributes.
Sou forçado a usar o MVC 4.0 no meu local de trabalho atual e preciso adicionar uma classe css para a integração do JQuery. Resolvi esse problema usando um método de extensão única ...
Método de extensão:
Uso da marcação HTML:
(Certifique-se de incluir o espaço para nome do método de extensão na exibição de navalha)
Explicação: A idéia é injetar no HTML existente. Optei por analisar o elemento atual usando o Linq para XML usando
XDocument.Parse()
. Eu passo o htmlAttributes como tipoobject
. Utilizo o MVCRouteValueDictionary
para analisar os htmlAttributes transmitidos. Mesclo os atributos onde eles já existem ou adiciono um novo atributo se ele ainda não existir.No caso de a entrada não ser analisável,
XDocument.Parse()
abandono toda a esperança e retorno a string de entrada original.Agora eu posso usar o benefício do DisplayFor (renderizar tipos de dados como moeda adequadamente), mas também tenho a capacidade de especificar classes css (e qualquer outro atributo para esse assunto). Pode ser útil para adicionar atributos como
data-*
, oung-*
(Angular).fonte
Você pode criar o mesmo comportamento criando um editor personalizado simples chamado DateTime.cshtml, salvando-o em Views / Shared / EditorTemplates
e na sua opinião
Observe que no meu exemplo estou codificando duas classes de css e o formato da data. Você pode, é claro, mudar isso. Você também pode fazer o mesmo com outros atributos html, como somente leitura, desativado etc.
fonte
Usei outra solução usando seletores de atributos CSS para obter o que você precisa.
Indique o atributo HTML que você conhece e coloque no estilo relativo que você deseja.
Como abaixo:
fonte
Não é necessário criar um modelo personalizado para o MVC 4. Use o TextBox em vez de EditFor aqui os atributos especiais de html não são suportados, ele é suportado apenas pelo MVC 5. O TextBox é compatível com o MVC 4, não conheço outra versão.
fonte
Você também pode fazer isso via jQuery:
fonte
Eu só precisava definir o tamanho de uma caixa de texto em uma página. Os atributos de codificação no modelo e a criação de modelos de editor personalizados foram um exagero, então acabei de empacotar a chamada @ Html.EditorFor com uma tag span que chamou uma classe que especifica o tamanho da caixa de texto.
Declaração de classe CSS:
Ver código:
fonte
Uma melhor maneira de aplicar classe
@Html.EditorFor()
no MVC3 RAzor éEle adicionará o estilo acima ao seu
EditorFor()
Funciona para MVC3.
fonte