2011-02-23 24 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