2013-09-27 18 views
5

Chcę wiedzieć, jak napisać HTML Helper jak @Html.TextBoxFor(model => model.signature), aby uzyskać parametr data-id w wytworzonym wejściu jak poniżej przez pomocnika.jak dodać parametry do maszynki do golenia

<input type="text" name="signature" data-id="No Signature" /> 

Uwaga 1: parametr jak dataId jest praca htmlAttributes ponieważ jest to proste zmienne.

Uwaga 2: Wiem rozszerzoną metodę i atrybut wykorzystanie takich jak @{var attributes = new Dictionary<string, object>{{ "data-id", "No Signature" }};}

czuję, że musi być lepszy sposób, aby rozwiązać ten problem. Dowolny pomysł...?

Wielkie dzięki.

+0

wystarczy napisać własną metodę rozszerzenia z parametrem id danych, a następnie po prostu poradzić sobie ... –

+0

zobaczyć tutaj http://stackoverflow.com/questions/6202053/asp-net-mvc-extending-textbox do-bez-ponownego-pisania-metody –

+0

Do przekazywania atrybutów 'data' użyj podkreślenia' _' zamiast '-'. Proszę odnieść się do stackoverflowflow.com/questions/4108943/actionlink- htmlattributes –

Odpowiedz

1

można stworzyć swój własny custom helpers jak:

public static class TextBoxExtensions 
    { 
      public static string CustomTextBox(this HtmlHelper helper, string name) 
      { 
       return String.Format("<input type='text' name={0} data-id='No Signature'></input>", name); 
      } 
    } 

Następnie w widoku można zrobić:

@Html.CustomTextBox("signature"); 
+0

tnx za komentarz, ale wiem - napisałem to w nocie 2 – ehsan

+0

@hash - twoja uwaga dwa nie jest niestandardowym pomocnikiem. Moja odpowiedź pokazuje, jak utworzyć jedną notatkę nr 2: –

+0

, która jest 2 sposobem rozwiązania tego problemu. 1- metody rozszerzania (lub tworzenie niestandardowych pomocników) - 2 atrybuty w widoku maszynki. – ehsan

4

Możesz dodać data- atrybuty w ten sposób:

@Html.TextBoxFor(model => model.signature, new { data_id = "No signature" }) 

You zamiast zamiast myślników trzeba używać podkreśleń (_) (-).

Wskazówka: to również możliwe użycie Model zmienne w swoim data- atrybutami:

new { data_id = Model.Id } 
-2

Kod poniżej utworzy pomocnika CustomTextBoxFor rozszerzając TextBoxFor. Pozwala to w pełni wykorzystać konwencje walidacji MVC, pozostawiając otwarty parametr htmlAttributes, aby w razie potrzeby można było dodać więcej atrybutów.

 public static MvcHtmlString CustomTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
      Expression<Func<TModel, TProperty>> expression, string customData) 
     { 
      return htmlHelper.CustomTextBoxFor(expression, customData, (IDictionary<string, object>)null); 
     } 

     public static MvcHtmlString CustomTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
      Expression<Func<TModel, TProperty>> expression, string customData, object htmlAttributes) 
     { 
      IDictionary<string, object> attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); 
      attributes.Add("data-custom", customData); 
      return htmlHelper.TextBoxFor(expression, new { data_custom = "customData" }); 
     } 

Zastosowanie:

@Html.CustomTextBoxFor(model => model.MyProperty, Model.CustomData) 
@Html.CustomTextBoxFor(model => model.MyProperty, Model.CustomData, new { @class="pretty"})  
Powiązane problemy