2012-02-28 24 views
3

私はsearchstringでsearchmodelを構築し、minlengthでそれを修飾しました。私の見解では、検索文字列のrequierementsを表示したいと思いますが、どのように装飾を取得できますか?ビューにモデルデコレーションを表示するにはどうすればいいですか?

モデル:

public class SearchModel 
{ 
    [StringLength(50,MinimumLength = 4)] 
    public string Searchname { get; set; } 
} 

レイザー:

@model Project.Models.SearchModel 

<p> 
    The search value has to be a min length of: ... 
</p> 
+0

定数?しかし、私は属性値を取得する関数が良いだろうと同意します。私はそれが反射を使うことによって可能だと思います。 – Marthijn

答えて

2

あなたはこれを行うことができます:

@(typeof(SearchModel).GetProperty("Searchname").GetCustomAttributes(true) 
    .OfType<StringLengthAttribute>().First().MinimumLength) 

もののは、MVC純度のために、あなたはおそらくビューのコードにこのロジックを置くことは避けるべきです。次のいずれかのモデルのメタデータを経由して情報を利用できるようにカスタムModelMetadataProviderを使用し

  • あなたのコントローラは、この情報を取得し、別のプロパティとしてモデル自体にそれを入れてください、または
+0

私はあなたの単純な解決策が好きです:-)、しかし問題があります** "メソッド 'GetCustomAttributes'が0引数を取ることはありません" **(名前空間も追加する必要があるかもしれません) – Zoli

+2

これはうまくいきます: 'typeof(NAMESPACE。 SearchModel).GetProperty( "Searchname")。GetCustomAttributes(true).OfType ()。First()。MinimumLength' – Zoli

1

あなたは、クライアント側でのバリデータの属性からこの値を取得することができます。

$('#Searchname').attr('data-val-length-min') 

またはこれは剃刀のサーバー側で必要ですか?

@{ 
    var attr = typeof(NAMESPACE.SearchModel).GetProperty("Searchname").GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.StringLengthAttribute), true)[0]; 
    var min = attr.GetType().GetProperty("MinimumLength").GetValue(attr, null); 
} 
. 
. 
. 
<p>The search value has to be a min length of: @min</p> 
+0

私はそれについても考えており、より良い方法がない場合はそれをやります: – jwillmer

+1

ひげそり/ C#ソリューションも追加されました。楽しい! – Zoli

関連する問題