ASP.NET MVC 3: Substitua o atributo “name” por TextBoxFor

É possível ao usar Html.TextBoxFor para replace o atributo name?

Eu tentei sem sucesso. Eu preciso usar TextBoxFor para obter a validação do lado do cliente para trabalhar, no entanto, por razões que eu não vou entrar, eu preciso do nome da checkbox de texto para ser diferente da gerada.

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 nome. Isso é possível?

Atualização : Examinando o código para TextBoxFor. Não parece que há um caminho fácil. Espero que alguém possa provar que estou errado.

Rob, na verdade, existe uma maneira muito mais simples. Em vez de nome , use Nome :

 @Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" }) 

Você está perguntando isso porque quer aplicar um prefixo ao nome? Nesse caso, você pode fazer isso definindo ViewData.TemplateInfo.HtmlFieldPrefix no Controlador.

Eu aprendi muito sobre essas coisas do blog de Brad Wilson .

EditorFor tem uma sobrecarga onde você pode fornecer o atributo name como um parâmetro:

  @Html.EditorFor(expression, null, name) 

Tente EditorFor . você pode passar a string como nome do modelo se quiser ter certeza de que a checkbox de texto é renderizada mesmo se o tipo de propriedade não for string. Se a propriedade já é string, ela não precisa ter explicitamente o nome do object para processar a checkbox de texto, portanto, você pode passar null . Note que ele não requer o parâmetro id explicitamente, ele irá inferir a partir do nome do elemento. E todas as coisas de validação ainda estão ativas com o EditorFor

  @Html.EditorFor(x => x.Data, "string", Model.Key + "_Data") 

A resposta de ben me deu o que eu estava procurando, exceto que você precisa envolver em Html.Raw

 @Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")) 

um pouco “unpretty” =), tente:

 @Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData") 

É chamado Microsoft GOTCHA

Use o nome em maiúsculas, como este

 @Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"}) 

Para mim, funciona! Espero que ajuda!

 @Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } }) 
 @Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" }) 

Não sei qual desses dois parâmetros de string no meio faz o trabalho, mas funcionou apenas quando eu digitei os dois.

Para este exemplo, eu estava desativando campos de formulário com base em permissions, mas ainda as mostrando. Eu tinha um campo oculto para enviar o valor para o controlador, mas queria um nome de campo diferente no EditorFor. Primeiro param após o valor do modelo representa a propriedade “name”, o segundo é o novo nome.

 @Html.EditorFor(m => m.UserName, "name", "UserNameDisabled", new { htmlAttributes = new { @class = "form-control", @disabled = "disabled"} }); 

Resulta em: