2013-09-27 24 views
5

@Html.TextBoxFor(model => model.signature) gibi HTML Yardımcısının data-id parametresini nasıl yazacağı gibi yardımcının girişinde benzer şekilde yazılmasını istiyorum.ustura yardımcılarına parametreler nasıl eklenir

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

Not 1: bu basit bir değişken olduğu için dataId gibi parametre htmlAttributes tarafından eseridir.

Not 2: Ben bu çözmek için daha iyi bir yolu olması gerektiğini hissediyorum @{var attributes = new Dictionary<string, object>{{ "data-id", "No Signature" }};}

gibi genişletilmiş yöntem ve kullanım özelliğini biliyorum. Herhangi bir fikir...?

Çok teşekkürler.

+0

sadece veri-id parametresi ile kendi uzantısı yöntemi yazıp sadece kendiniz idare ... –

+0

burada bkz http://stackoverflow.com/questions/6202053/asp-net-mvc-extending-textboxfor-re-yazma-the-method –

+0

'data' özniteliklerini iletmek için,' 'yerine' _' altçizgisini kullanın, lütfen stackoverflow.com/questions/4108943/actionlink- adresine bakın. htmlattributes –

cevap

1

oluşturabilir kendi gibi custom helpers: Sonra

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

sizin View yapabileceğiniz:

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

You: Sen data- niteliklerini bu şekilde ekleyebilir

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

Yorumunuz için tnx ama biliyorum - notu yazdım not 2 – ehsan

+0

@ehsan - notunuz iki özel bir yardımcı değil. Cevabım size bir –

+0

notu nasıl oluşturulacağını gösterir 2 notu çözmek için 2 yol gösterir. 1- uzatma yöntemleri (veya özel yardımcılar yapın) - tıraş makinesi görünümündeki özellikler. – ehsan

4

Alt çizgi (_) tire yerine () kullanmak zorunda).

İpucu: sizin data- özniteliklerde Model değişkenleri kullanmak da mümkündür:

new { data_id = Model.Id } 
-2

kod aşağıda TextBoxFor uzatarak bir CustomTextBoxFor yardımcı yaratacaktır. Bu, MVC'nin onaylama sözleşmelerinden tam olarak yararlanmanızı sağlar, böylece htmlAttributes parametresini açarak daha fazla öznitelik gerektiği gibi eklenebilir.

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

Kullanımı:

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