ASP.NET MVC 3: TextBoxFor ile "ad" özniteliğini geçersiz kılın


99

Html.TextBoxForName özniteliğini geçersiz kılmak mümkün müdür ?

Başarısız olarak denedim. İstemci tarafı doğrulamasının çalışması için TextBoxFor'u kullanmam gerekiyor, ancak buna girmeyeceğim nedenlerden dolayı metin kutusunun adının oluşturulan olandan farklı olmasına ihtiyacım var.

Aşağıdakileri denedim:

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

Kimlik için çalışan ama ad için değil. Mümkün mü?

Güncelleme : TextBoxFor koduna bakma. Kolay bir yolu yok gibi görünüyor. Umarım birisi yanıldığımı kanıtlayabilir.




2
Bu sorular biraz farklı bir şey soruyor. Ayrıca - bu üçünden daha eski olanı, bu yüzden kopyasını kastettiğini düşünüyorum.
Rob Stevenson-Leggett

Yanıtlar:


234

Rob, aslında çok daha basit bir yolu var. Yerine adı kullanın Adı :

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

11
@Highwingers büyük / küçük harfe duyarlıdır, bu küçük ayrıntı saat tasarrufu yapma potansiyeline sahiptir.
anar khalilov

3
Overkill .. İsim ama kimlik X_X
Vladimirs

2
Tuhaf, "id" büyük / küçük harfe duyarlı değildir (Id ve id ile uyumludur) ancak "name" değildir.
Vladimirs

10
ASP.NET 4, paylaşması sonucunda Nameiki özniteliklerde sonuçları, Nameve name, ve model bağlayıcı kullanır name.
GSerg

1
Ancak isimleri sadece duruma göre değişen iki farklı mülkün idaresi bir bakım kabusu için bir reçetedir .....
James McCormack


13

EditorFor, nameözniteliği parametre olarak sağlayabileceğiniz bir aşırı yüklemeye sahiptir :

 @Html.EditorFor(expression, null, name)

1
Bunu saatler önce
bulsaydım

İlginç, ancak DropDownListFor gibi benzer yardımcılar için ad özniteliği için aşırı yükleme yoktur, bunu html öznitelikleri parametresinde belirtmeniz gerekir (Ad'da büyük harf N ile).
nmit026

8

EditorFor'u deneyin . özellik türü dize olmasa bile metin kutusunun işlendiğinden emin olmak istiyorsanız dizeyi şablon adı olarak geçirebilirsiniz. Özellik zaten templatenamedizeyse, metin kutusunu açıkça oluşturması gerekmez , böylece geçebilirsiniz null. Açıkça id parametresini gerektirmediğini, bunu öğe adından çıkaracağını unutmayın. Ve tüm doğrulama işleri EditorFor ile hala aktiftir

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

7

Ben'in cevabı, Html'ye sarmanız gerekmesi dışında aradığımı bana verdi.

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

4

Microsoft GOTCHA olarak adlandırılır

Adı büyük harflerle yazın, örneğin

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

3

biraz "belirsiz" =), şunu deneyin:

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

Bunu yapmanın güzel ve kolay bir yolu gibi görünüyor. Biraz huysuz :-)
Rob Stevenson-Leggett

umm, bu şekilde, normal Html.TexBox'ı tercih etmezsin .. çünkü değiştirmeden sonra herhangi bir statik yazım kayboldu
sharp johnny

1

Benim için işe yarıyor! Umarım bu yardımcı olur!

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

1
@Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" })

Ortadaki bu iki string parametresinden hangisinin işe yaradığından emin değilim, ancak yalnızca ikisini de yazdığımda işe yaradı.


Id ve Name. bu benim için çalıştı. Yukarıdaki tüm cevapları inceledim ve hiçbiri işe yaramadı, ama bu 1. Teşekkürler.
Orion

public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string templateName, string htmlFieldName, object additionalViewData);. Ne templateNameolması gerektiği hakkında hiçbir fikrim yok , bu yüzden kullandım null. İçin htmlFieldNameben (benim durumumda "IPMI" yerine "IPMI" nin) parametresinin adını kullandı. Bu benim için hile yaptı.
BCdotWEB

0

Bu örnek için, form alanlarını izinlere göre devre dışı bırakıyordum, ancak yine de gösteriyorum. Değeri denetleyiciye göndermek için gizli bir alanım vardı, ancak EditorFor'da farklı bir alan adı istedim. Model değerinden sonraki ilk parametre "name" özelliğini temsil eder, ikincisi ise yeni addır.

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

Sonuçlar:

<input class="form-control text-box single-line" disabled="disabled" id="UserNameDisabled" name="UserNameDisabled" type="text" value="someEnteredValue" /> 

0

Basit tutun, kimliği zaten sağlıyorsunuz, "TextBoxFor" yerine "TextBox" yöntemini kullanabilmelisiniz ve hem istemci tarafında hem de sunucu tarafında iyi çalışacaktır. Buna ek olarak, kabul edilen cevap işe yarayacak ancak bir tarayıcı kullanarak incelerseniz etiketinizde yinelenen Ad nitelikleri oluşturacaktır. Aşağıdaki çözümde bu sorun yok.

MvcHtmlString Html.TextBox (dize adı, dize değeri, nesne htmlAttributes)

@Html.TextBox(Model.Key + "_Data", Model.Key, new { id = Model.Key + "_Data" }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.