2013-09-27 9 views
5

Voglio sapere come scrivere HTML Helper come @Html.TextBoxFor(model => model.signature) per avere il parametro data-id nell'input prodotto come di seguito dall'helper.come aggiungere parametri agli aiutanti del rasoio

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

Nota 1: il parametro come dataId è opera di htmlAttributes perché è una variabile semplice.

Nota 2: Lo so metodo esteso e attributo uso come @{var attributes = new Dictionary<string, object>{{ "data-id", "No Signature" }};}

sento che ci deve essere un modo migliore per risolvere questo problema. Qualche idea...?

Grazie mille.

+0

basta scrivere il proprio metodo di estensione con il parametro dei dati-id e poi basta gestire da soli ... –

+0

Vedi qui http://stackoverflow.com/questions/6202053/asp-net-mvc-extending-textboxfor-senza-re-writing-the-method –

+0

Per il passaggio degli attributi 'data', usare' _' underscore invece di '-' Si prega di consultare stackoverflow.com/questions/4108943/actionlink- htmlattributes –

risposta

1

È possibile creare il proprio custom helpers come:

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); 
      } 
    } 

Poi, nel tuo View si può fare:

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

tnx per il tuo commento ma so - Ho scritto questo nella nota 2 – ehsan

+0

@ ehsan - la tua nota due non è un aiuto personalizzato. La mia risposta mostra come creare una nota –

+0

2 in 2 modi per risolverlo. 1- metodi di estensione (o creare aiutanti personalizzati) 2- attributi nella vista del rasoio. – ehsan

4

È possibile aggiungere data- attributi in questo modo:

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

È utilizzare i caratteri di sottolineatura (_) anziché i trattini (-).

Suggerimento: è anche possibile utilizzare Model variabili nei data- attributi:

new { data_id = Model.Id } 
-2

Il codice di seguito creerà un aiutante CustomTextBoxFor estendendo TextBoxFor. Ciò consente di sfruttare appieno le convenzioni di convalida di MVC e di aprire il parametro htmlAttributes in modo da aggiungere ulteriori attributi in base alle esigenze.

 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" }); 
     } 

Usage:

@Html.CustomTextBoxFor(model => model.MyProperty, Model.CustomData) 
@Html.CustomTextBoxFor(model => model.MyProperty, Model.CustomData, new { @class="pretty"})  
Problemi correlati