5
モデルのプロパティから属性値が必要なメソッドでHTMLヘルパを拡張しました。だから私はカスタム属性をそのように定義しました。MVC3 HTMLヘルパーでカスタム属性値を取得できない
public class ChangeLogFieldAttribute : Attribute {
public string FieldName { get; set; }
}
私のモデルではこのように使用されています。
私のヘルパーメソッドでは、属性にプロパティが使用されている場合、次のコードでmy属性のFieldName値を取得しています。
var itemName = ((MemberExpression)ex.Body).Member.Name;
var containerType = html.ViewData.ModelMetadata.ContainerType;
var attribute = ((ChangeLogFieldAttribute[])containerType.GetProperty(html.ViewData.ModelMetadata.PropertyName).GetCustomAttributes(typeof(ChangeLogFieldAttribute), false)).FirstOrDefault();
if (attribute != null) {
itemName = attribute.FieldName;
}
ただし、このコードに到達すると、containerTypeがnullであるため例外が発生します。
私はこれを正しく実行しているかどうかはわかりませんが、これまでのところ4つの異なるソースから取得しました。私の問題や代替案を示唆することができれば、感謝しています。
ありがとうございました。 SOLUTION
WITH
UPDATE私はそれ一部を調整する必要がありましたが、私は、ダーリンディミトロフのソリューションを使用していました。ここに私が加えたものがあります。属性メタデータの存在を確認しなければならず、すべてが良好でした。
var fieldName = ((MemberExpression)ex.Body).Member.Name;
var metadata = ModelMetadata.FromLambdaExpression(ex, html.ViewData);
if (metadata.AdditionalValues.ContainsKey("fieldName")) {
fieldName = (string)metadata.AdditionalValues["fieldName"];
}
を、あなたは 'metadata.PropertyName'の代わりに使用することができます'((MemberExpression)ex.Body).Member.Name'。しかし、これはフィールド名では機能しません。また、 '.FieldName'や' .MemberName'も表示されません。 –