É possível ao usar Html.TextBoxFor
para substituir o atributo de nome?
Eu tentei sem sucesso. Preciso usar TextBoxFor para fazer a validação do lado do cliente funcionar, no entanto, por motivos que não vou entrar em detalhes, preciso que o nome da caixa de texto seja diferente do gerado.
Eu tentei o seguinte:
@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })
Que funciona para ID, mas não para nome. Isso é possível?
Atualização : Olhando para o código de TextBoxFor. Não parece haver uma maneira fácil. Espero que alguém possa provar que estou errado.
c#
asp.net-mvc-3
razor
html-helper
Rob Stevenson-Leggett
fonte
fonte
Respostas:
Rob, na verdade existe uma maneira muito mais simples. Em vez de nome , use Nome :
fonte
Name
resultados em dois atributos,Name
ename
, e o fichário de modelo usa oname
.Você está perguntando isso porque deseja aplicar um prefixo ao nome? Nesse caso, você pode fazer isso definindo
ViewData.TemplateInfo.HtmlFieldPrefix
em seu controlador.Aprendi muito sobre essas coisas no blog de Brad Wilson .
fonte
EditorFor tem uma sobrecarga onde você pode fornecer o
name
atributo como um parâmetro:fonte
Experimente EditorFor . você pode passar string como nome de modelo se quiser ter certeza de que a caixa de texto é renderizada mesmo se o tipo de propriedade não for string. Se a propriedade já for string, ela não precisa
templatename
renderizar a caixa de texto explicitamente, então você pode passarnull
. Observe que ele não requer o parâmetro id explicitamente, ele o inferirá do nome do elemento. E todas as coisas de validação ainda estão ativas com EditorForfonte
A resposta de Ben me deu o que eu estava procurando, exceto que você precisa incluir em Html.Raw
fonte
Chama-se Microsoft GOTCHA
Use o nome em maiúsculas, assim
fonte
um pouco "despretensioso" =), tente:
fonte
Para mim, funciona! Espero que ajude!
fonte
Não tenho certeza de qual desses dois parâmetros de string no meio faz o trabalho, mas funcionou apenas quando eu digitei os dois.
fonte
public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string templateName, string htmlFieldName, object additionalViewData);
. NãotemplateName
tenho ideia do que deveria ser, então eu useinull
. PoishtmlFieldName
usei o nome do parâmetro (no meu caso "ipmi" em vez de "IPMI"). Isso funcionou para mim.Neste exemplo, desabilitei os campos do formulário com base nas permissões, mas ainda os mostrei. Eu tinha um campo oculto para enviar o valor ao controlador, mas queria um nome de campo diferente no EditorFor. O primeiro parâmetro após o valor do modelo representa a propriedade "nome", o segundo é o novo nome.
Resulta em:
fonte
Mantenha-o simples, você já fornecendo o ID, você deve simplesmente ser capaz de usar o método "TextBox" em vez de "TextBoxFor" e funcionará bem no lado do cliente e no lado do servidor. Além disso, embora a resposta aceita funcione, ela produzirá atributos de Nome duplicados em sua tag se você inspecioná-la usando um navegador. A solução abaixo não tem esse problema.
MvcHtmlString Html.TextBox (nome da string, valor da string, objeto htmlAttributes)
fonte