2013-09-27 3 views
5

hinzufügen Ich möchte wissen, wie HTML-Helper wie @Html.TextBoxFor(model => model.signature) schreiben, um data-id Parameter in produzierten Eingang wie unten von Helfer.wie Parameter zu Rasiermesserhelfern

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

Anmerkung 1: Parameter wie dataId ist die Arbeit von htmlAttributes, weil es eine einfache Variable ist.

Anmerkung 2: Ich weiß, erweitert Methode und Verwendung Attribut wie @{var attributes = new Dictionary<string, object>{{ "data-id", "No Signature" }};}

ich, dass es fühlen muss ein besserer Weg, dies zu lösen. Irgendeine Idee...?

Vielen Dank.

+0

nur Ihre eigene Erweiterungsmethode mit den Daten-id Parametern schreiben und es dann selbst nur handhaben ... –

+0

hier sehen http://stackoverflow.com/questions/6202053/asp-net-mvc-extending-textboxfor-without-re-writing-the-Methode –

+0

Um 'data' Attribute zu übergeben, verwenden Sie' _' Unterstriche anstelle von '-' Bitte beachten Sie stackoverflow.com/questions/4108943/actionlink- htmlattributes –

Antwort

1

können Sie Ihre eigene Gruppe gründen custom helpers wie:

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

Dann in Ihrer Ansicht können Sie tun:

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

tnx für Ihren Kommentar, aber ich weiß - ich schrieb dies in Anmerkung 2 – ehsan

+0

@ehsan - Ihre Anmerkung zwei ist kein Brauch Helfer. Meine Antwort zeigt Ihnen, wie Sie eine –

+0

Note 2 zeigt 2 Wege, um das zu lösen. 1. Erweiterungsmethoden (oder benutzerdefinierte Helfer erstellen) 2- Attribute in der Rasiereransicht. – ehsan

4

Sie data- Attribute auf diese Weise hinzufügen:

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

Sie muss anstelle von Bindestrichen Unterstriche (_) verwenden (-).

Tipp: es ist auch möglich, Model Variablen in Ihrem data- Attribute zu verwenden:

new { data_id = Model.Id } 
-2

Der folgende Code einen CustomTextBoxFor Helfer schaffen TextBoxFor durch die Erweiterung. Auf diese Weise können Sie die Validierungskonventionen von MVC voll ausnutzen und den Parameter htmlAttributes offen lassen, sodass bei Bedarf weitere Attribute angehängt werden können.

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

Verbrauch:

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