2011-02-23 30 views
4

我有一個自定義類型的錢爲我的ViewModel:在ASP.NET使用Html.EditorFor()定製型MVC

public class Money 
{ 
    public Money(decimal value) 
    { 
     Value = value; 
    } 

    public decimal Value { get; private set; } 

    public override string ToString() 
    { 
     return string.Format("{0:0.00}", Value); 
    } 
} 

,我想通過HTML.EditorFor(viewModel => viewModel.MyMoneyProperty)呈現在ASP.NET MVC一個文本框,但它不起作用。是否有我必須在Money中實現的特殊界面?

最好的問候和感謝提前,

斯特芬

回答

3

嘗試這樣的:

public class Money 
{ 
    public Money(decimal value) 
    { 
     Value = value; 
    } 

    [DisplayFormat(DataFormatString = "{0:0.00}", ApplyFormatInEditMode = true)] 
    public decimal Value { get; private set; } 
} 

,並在您的視圖:

<%= Html.EditorFor(x => x.SomePropertyOfTypeMoney.Value) %> 

或者你可以有一個自定義編輯器Money的模板(~/Views/Shared/EditorTemplates/Money.ascx):

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.Money>" 
%> 
<%= Html.TextBox("", Model.Value.ToString("0.00")) %> 

,然後在您的視圖:

<%= Html.EditorFor(x => x.SomePropertyOfTypeMoney) %> 
+0

感謝這對我幫助很大。我添加了一個Text屬性,並在getter和setter中進行了轉換。然後我將它綁定在視圖中。 – forki23 2011-02-23 19:34:01

+0

仍然存在一個問題。現在,HTML代碼中的所有id都以_text作爲後綴。我怎樣才能避免這種情況? – forki23 2011-02-24 10:17:51

+1

@ forki23,發生這種情況是因爲您添加了「文本」屬性,並且文本框助手正在使用它。您可能需要一個修改ID的自定義助手,但這是我不會做的事情。讓助手生成任何它喜歡的ID,因爲這樣它們將保證是唯一的。如果你開始搞砸ID,那就有風險。 – 2011-02-24 10:38:11