2011-07-07 10 views
20

Buduję swój pierwszy niestandardowy szablon edytora do kontroli obszaru tekstowego. Mój kod do tej pory to -Jak uzyskać nazwę pola modelu w niestandardowym szablonie edytora

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %> 
<%= Html.TextAreaFor(Model => Model , 2, 30, 
    new { @class = "html", @placeholder = ViewData.ModelMetadata.Watermark }) %> 

To nie jest tak dużo, ale działa. Ale musimy dodać pole licznika znaków, aby wyświetlić pozostałą liczbę znaków, które użytkownik może wpisać. Wiem, jak wykonać wszystkie JavaScript, aby to działało.

Aby system nadawania nazwy był taki sam, dodam kontrolkę o nazwie ".charCounter", aby wyświetlić liczbę pozostałych pozostałych znaków. Mój problem polega na tym, że nie mogę znaleźć prawidłowej składni, aby móc pobrać nazwę pola dla modelu.

Ostateczna wersja będzie wyglądać mniej więcej tak (JavaScript pominięte) -

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %> 
<%= Html.TextAreaFor(Model => Model , 2, 30, 
    new { @class = "html", @placeholder = ViewData.ModelMetadata.Watermark }) %> 
<span class="xxx">Remaining characters - 
    <input readonly type="text" name="<fieldName>.charCounter" /> 
</span> 

Odpowiedz

29

Można użyć ViewData.TemplateInfo.HtmlFieldPrefix, tak:

<input 
    readonly="readonly" 
    type="text" 
    name="<%= ViewData.TemplateInfo.HtmlFieldPrefix %>.charCounter" 
/> 
+0

Co o nazwie klasy ??? – ConductedClever

2

ViewData.ModelMetadata.PropertyName prace ładnie w MVC3.

W brzytwa:

<input readonly="readonly" type="text" name="@ViewData.ModelMetadata.PropertyName"> 
15

Pobiegłem do problemu gdzie PropertyName nie wracał do modelu prefiks np Contact.FirstName. Udało mi się mieć zwróci identyfikator pola HTML używając tych:

@ViewData.TemplateInfo.GetFullHtmlFieldId("") 

Powroty: Contact_FirstName

Odpowiednio można powrócić nazwę pola, używając:

@ViewData.TemplateInfo.GetFullHtmlFieldName("") 

Powroty:

Contact.FirstName

0

Uzyskiwanie tylko nazwa modelu/ID (np Data urodzenia):

name = ViewData.ModelMetadata.PropertyName; 

Pierwsze nazwę modelu z prefiksów dla złożonych obiektów (np Identity.Person.BirthDate):

name="@Html.NameFor(m => Model)" 

lub

name = ViewData.TemplateInfo.HtmlFieldPrefix; 

Uzyskanie modelu Id z prefiksów dla złożonych obiektów (np Identity_Person_BirthDate):

@Html.IdFor(m => Model) 

lub

@Html.IdForModel() 
Powiązane problemy