2011-08-07 37 views
2

這可能是一個愚蠢的問題,但我找不到要找的內容。用於HTML控件的MVC幫助程序庫

是否有任何MVC Helper庫,專門用於表單類型控件。

例如,我要實現HTML的標籤,如:

<label class="form-label-left required" for="message">Message: <span>*</span></label> 

不幸的是內置的助手不允許以指定標籤上的任何東西。 (據我所知)

其他例子能夠指定輸入類型:

<input type="email" name="EmailAddress" /> 

與其他類型的如「電話」,「範圍」,「數字」等,從HTML5。

那麼,有沒有任何圖書館可以讓你更好地控制這類事情,還是僅僅寫自己的幫手就更好?

更新:

我在RSS訂閱的晨報釀造發現這一點。

http://www.codeproject.com/KB/webforms/Html5MVCWebControls.aspx

一種HTML5控件庫。仍然看起來缺乏適用於MVC的Customizable或HTML5庫。

回答

0

你可以通過ASP.NET MVC源代碼,並想出定製助手。以下是帶有所需指標的標籤示例。

public MvcHtmlString CustomLabelFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression) 
{ 
    var metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData); 
    string htmlFieldName = ExpressionHelper.GetExpressionText(expression); 

    string resolvedLabelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); 
    if (String.IsNullOrEmpty(resolvedLabelText)) 
    { 
     return MvcHtmlString.Empty; 
    } 

    if (metadata.IsRequired) 
    { 
     var spanTag = new TagBuilder("span"); 
     spanTag.AddCssClass("required-star"); 
     spanTag.InnerHtml = "*"; 

     resolvedLabelText = string.Concat(resolvedLabelText, spanTag.ToString(TagRenderMode.Normal)); 
    } 

    var tag = new TagBuilder("label"); 
    tag.Attributes.Add("for", TagBuilder.CreateSanitizedId(helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName))); 
    tag.InnerHtml = resolvedLabelText; 
    tag.AddCssClass("text_label"); 

    return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal)); 
} 
+0

乾杯,我其實寫了類似的東西,但它沒有出現在我身上,使用元數據來解決是否需要。這很酷。我想知道是否值得爲所有這些東西創建我自己的庫,或者是否有任何庫已經做了很多這些東西,所以我不創建一種新的車輪。 – Phill

+0

@Phill有很多第三方庫。例如[MVC Contrib](http://mvccontrib.codeplex.com/),[Telerik](http://www.telerik.com/products/aspnet-mvc.aspx)。我傾向於寫我自己的一些簡單的任務。 – Eranga

+0

我無法弄清MVC Contrib是什麼,當我昨天看着它的時候,它看起來像是想要做所有事情,我找不到任何可用的'一羣幫手'。 Telerik我一點也不接觸,他們的Web Form控件很糟糕。 – Phill