2013-09-27 102 views
5

Tôi muốn biết cách viết Trình trợ giúp HTML như @Html.TextBoxFor(model => model.signature) để có tham số data-id trong đầu vào được sản xuất như dưới đây bằng trình trợ giúp.cách thêm tham số cho người trợ giúp dao cạo

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

Lưu ý 1: thông số như dataId là tác phẩm của htmlAttributes bởi vì nó là một biến đơn giản.

Note 2: Tôi biết phương pháp mở rộng và sử dụng thuộc tính như @{var attributes = new Dictionary<string, object>{{ "data-id", "No Signature" }};}

tôi cảm thấy rằng phải có một cách tốt hơn để giải quyết việc này. Bất kỳ ý tưởng...?

Cảm ơn rất nhiều.

+0

chỉ cần viết phương pháp khuyến nông của riêng bạn với số data-id và sau đó chỉ cần xử lý nó cho mình ... –

+0

thấy ở đây http://stackoverflow.com/questions/6202053/asp-net-mvc-extending-textboxfor-without-re-writing-the-method –

+0

Để truyền các thuộc tính 'data', sử dụng' _' gạch dưới thay vì '-' Vui lòng tham khảo stackoverflow.com/questions/4108943/actionlink- htmlattributes –

Trả lời

1

Bạn có thể tạo riêng của bạn custom helpers như:

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

Sau đó, trong Xem của bạn, bạn có thể làm:

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

tnx cho bình luận của bạn nhưng tôi biết - Tôi đã viết điều này trong lưu ý 2 – ehsan

+0

@ehsan - ghi chú của bạn hai không phải là một trợ giúp tùy chỉnh. Câu trả lời của tôi cho bạn thấy làm thế nào để tạo ra một ghi chú –

+0

2 cho thấy 2 cách để giải quyết điều đó. 1- phương pháp mở rộng (hoặc làm cho người trợ giúp tùy chỉnh) 2- thuộc tính trong xem dao cạo. – ehsan

4

Bạn có thể thêm data- thuộc tính theo cách này:

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

Bạn phải sử dụng dấu gạch dưới (_) thay cho dấu gạch ngang ()).

Mẹo: nó cũng có thể sử dụng Model biến trong data- thuộc tính của bạn:

new { data_id = Model.Id } 
-2

Đoạn code dưới đây sẽ tạo ra một helper CustomTextBoxFor bằng cách mở rộng TextBoxFor. Điều này cho phép bạn tận dụng tối đa các quy ước xác thực của MVC cũng như để mở tham số htmlAttributes để có thể thêm các thuộc tính khác khi cần thiết.

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

Cách sử dụng:

@Html.CustomTextBoxFor(model => model.MyProperty, Model.CustomData) 
@Html.CustomTextBoxFor(model => model.MyProperty, Model.CustomData, new { @class="pretty"})  
Các vấn đề liên quan