2012-04-09 8 views
1

属性カスタムHTMLは、私がモデルを作成したいMVC3モデルで

@Html.DisplayForModel() 

私が探している結果は、このようなものです:

<label>Test:</label> <input type="checkbox" data-test="this is a test!" /> 

私は既にカスタム属性クラスを作成しましたが、これは何も生成されませんでした。

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Class, AllowMultiple = false, Inherited = true)] 
public class MicrodataAttribute : Attribute 
{ 
    public string Data { get; set; } 

    public RouteValueDictionary GetAttributes() 
    { 
     var attributes = new RouteValueDictionary(); 

     if (this.Data != null) 
     { 
      string[] kv = this.Data.Split(','); 
      attributes.Add(kv[0], kv[1]); 
     } 
     return attributes; 
    } 
} 



public class MetadataProvider : DataAnnotationsModelMetadataProvider 
{ 
    protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName) 
    { 
     var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName); 
     var additionalValues = attributes.OfType<HtmlPropertiesAttribute>().FirstOrDefault(); 
     if (additionalValues != null) 
     { 
      metadata.AdditionalValues.Add("HtmlAttributes", additionalValues); 
     } 
     return metadata; 
    } 
} 

答えて

2
+0

私の属性を使用するコードがないと言ったとき、あなたは何を意味するのか分かりませんか? MVCでモデルを使用することのポイントは、データベースやビューなどのアプリケーションをモデル化することです。 これらのモデルは動的に作成され、同じものを表示します。また、カスタムHTML5データダッシュ属性を使用する必要があります。 –

+0

@JasonFoglia - MVCフレームワークのコードでは、あなたの 'HtmlProperties'属性を使用していません。 –

+0

html5データダッシュ属性を使用したデータ検証がある場合、これはどのように可能ですか?例:data-valデータ検証を操作する方法はありませんか? あなたがすでに知っているように、これをやる方法は多少あります。あなたは私にリンクを送った、別のhttp://ruijarimba.wordpress.com/2011/07/24/asp-net-mvc-add-html5-microdata-to-your-applications-using-metadata-providers/ –

0

:MVCは、メタデータを使用し、カスタムobjectテンプレートの例を持っているあなたが作成する必要がありますどのように説明 - あなたの属性を使用しています何のコード...

は、以下のブログの記事を読んではありません@ JakubKoneckiの問題を議論し、彼が発表したブログ記事を読んだ後。 私のEditTemplateは、MVC 2/3、おそらく4のデータダッシュ属性の作成に役立ちます。

このファイルをroot/Views/Shared/EditTemplatesの下にString.cshtmlとして保存しました。私は剃刀エンジンを使用しているので、cshtml。エリアを使用している場合は場所が異なる可能性があり、「共有」ビューフォルダに保存する必要はありません。 Brad Wilsonによって投稿された ブログ@JakubKonecki全体を読んでください。

もう一度@JakubKonecki!

@{ 
    Dictionary<string, object> AV = ViewData.ModelMetadata.AdditionalValues; 
    Dictionary<string, object> htmlAttr = new Dictionary<string,object>(); 
    foreach (KeyValuePair<string, object> A in AV) 
    { 
     if (A.Value is System.Web.Routing.RouteValueDictionary) 
     { 
      foreach (KeyValuePair<string, object> B in (System.Web.Routing.RouteValueDictionary)A.Value) 
      { 
       htmlAttr.Add(B.Key, B.Value); 
      } 
     } 
    } 
    htmlAttr.Add("class", "text-box single-line"); 
    htmlAttr.Add("type", "text"); 
} 

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, htmlAttr) 
関連する問題