2013-03-12 34 views
6

Nếu tôi có một quy ước để thay đổi biên tập và thiết lập một số giá trịThêm giá trị cho ModelMetadata.AdditionalValues ​​khi sử dụng EditorFor

public class MetadataProvider : DataAnnotationsModelMetadataProvider 
{ 
    protected override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, System.ComponentModel.PropertyDescriptor propertyDescriptor) 
    { 
     var meta = base.GetMetadataForProperty(modelAccessor, containerType, propertyDescriptor); 
     if (IsNumericType(propertyDescriptor.PropertyType)) 
     { 
      meta.TemplateHint = "Number"; 

      var attr = propertyDescriptor.Attributes.OfType<RangeAttribute>().FirstOrDefault(); 
      if (attr != null) 
      { 
       meta.AdditionalValues["min"] = attr.Minimum; 
       meta.AdditionalValues["max"] = attr.Maximum; 
      } 
     } 
     return meta; 
    } 
    //... 
} 

Sau đó, tôi có thể nhận được các giá trị bổ sung trong mẫu

@{ 
    var min = ViewData.ModelMetadata.AdditionalValues["min"]; 
    var max = ViewData.ModelMetadata.AdditionalValues["max"]; 
} 

Tuy nhiên , nếu tôi sử dụng cùng một mẫu như thế này

@Html.EditorFor(x => x.Number, new { min = 1, max = 10 }) 

Sau đó, tôi sẽ nhận được các giá trị như này

@{ 
    var min = ViewData["min"]; 
    var max = ViewData["max"]; 
} 

Bằng cách nào đó tôi có thể kết hợp các giá trị bổ sungDataView và ModelMetadata.AdditionalValues ​​để tôi có thể nhận được các giá trị từ một nơi?

+0

Bạn có nói rằng bạn không thể nhận các giá trị từ 'Chế độ xem dữ liệu' trong chế độ xem Mẫu không? –

+0

Tôi không hiểu câu hỏi của bạn. ViewData và ModelMetadata.AdditionalValues ​​là hai thứ khác nhau. ViewData là thuộc tính của Controller và ViewPage. AdditionalValues ​​là một tài sản của ModelMetadata. Tất nhiên, chúng không thể được hợp nhất. Nếu bạn muốn hiển thị giá trị tối thiểu và tối đa của Thuộc tính phạm vi, tôi khuyên bạn nên tạo Trình trợ giúp Html. – ataravati

Trả lời

0

Tôi thành thật không cố gắng xem liệu AdditionalValues ​​có được kéo đúng cách hay không nhưng tích hợp sẵn cung cấp cho bạn trong quan điểm của bạn là gì?

@using System.Web.Mvc 

    @{ 
     var meta = ModelMetadata.FromLambdaExpression(model => model, ViewData); 
    } 
Các vấn đề liên quan