2014-02-25 29 views
0

我有一個自定義編輯器模板,可以將簡單文本框轉換爲數字框(對於類型編號)。不過我想靠邊從模型中的默認值作爲DefaultValue屬性從EditorTemplate內部訪問默認值屬性

定義在模型中我有

[DisplayName("Initial Token Count")] 
[DataType("Number")] 
[Required] 
[DefaultValue(5)] 
public int InitialTokenCount { get; set; } 

的EditorTemplate我有

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", type = "number" }) 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#@Html.NameFor(c => c)").kendoNumericTextBox({ decimals: 0, format: "#"}); 
    }); 
</script> 

現在,當視圖呈現如果沒有定義值,則默認爲0,但我希望它默認爲5,如DefaultValue(5)

我錯過了一些電話來實現這一目標嗎?

+0

如果你想在視圖中綁定模型屬性和相應的屬性,你應該使用'@ Html.TextBoxFor'而不是'@ Html.TextBox' – tweray

+0

@WeTTTT我不相信我能做到這一點,因爲這是一個EditorTemplate而不是通用視圖(因此模型始終是動態的) –

回答

1

您可以使用反射來實現這一點:

@{ 
    object value; 
    if(Model == null) 
    { 
     value = ((System.ComponentModel.DefaultValueAttribute) 
          ViewData.ModelMetadata.ContainerType.GetProperty(ViewData.ModelMetadata.PropertyName). 
          GetCustomAttributes(typeof(System.ComponentModel.DefaultValueAttribute), false)[0]).Value; 
    } 
    else 
    { 
     value = ViewData.TemplateInfo.FormattedModelValue; 
    } 
} 
@Html.TextBox("", @value, new { @class = "text-box single-line", type="number"}) 

編輯:改變它了一點,所以它適用於現有模式的價值。