2013-01-22 47 views
1

我有一个基于字段值的视图,必须显示自定义标签。基于字段值的自定义显示注释

视图模型:

public class CreateAdViewModel 
{ 
    public int Operation_Id { get; set; } 

    [Display(ResourceType = typeof(HeelpResources), Name = "AdViewModel_Price_Label")] 
    public decimal Price { get; set; } 
} 

查看:

<div id="price"> 
     @Html.DisplayNameFor(m => m.Price) 
     @Html.TextBoxFor(m => m.Price) € 
     @Html.ValidationMessageFor(m => m.Price) 
    </div> 

我想显示:

"Price: " if Operation_Id = 1 (For the Sale of a Car) 

而且

"Price Up To: " if Operation_Id = 2 (For someone looking for a car until value XX €) 
+0

是字段值已知的,在页面加载不可变? – mattytommo

+0

嗨,它是在向导的第一步中定义的,并且标签必须在向导的第三步中设置,所以是的,当我们进入第三步时,Operation_Id不会改变。希望我回答你的问题 – Patrick

回答

0

怎么样2个属性:

public class CreateAdViewModel 
{ 
    public int Operation_Id { get; set; } 

    [Display(ResourceType = typeof(HelpResources), Name = "AdViewModel_Price_Label")] 
    public decimal? Price { get; set; } 

    [Display(ResourceType = typeof(HelpResources), Name = "AdViewModel_MaxPrice_Label")] 
    public decimal? MaxPrice { get; set; } 
} 

和视图里面:

<div id="price"> 
    @if (Operation_Id == 1) 
    { 
     @Html.DisplayNameFor(m => m.Price) 
     @Html.TextBoxFor(m => m.Price) € 
     @Html.ValidationMessageFor(m => m.Price) 
    } 
    else 
    { 
     @Html.DisplayNameFor(m => m.MaxPrice) 
     @Html.TextBoxFor(m => m.MaxPrice) € 
     @Html.ValidationMessageFor(m => m.MaxPrice) 
    } 
</div> 
+0

嗨,这样我会有更多的工作(在DTO的映射过程中)只在数据库中插入1个值,因为我认为最好的方法是根据操作类型定义标签,但只保留数据库中的一个值(价格),你不觉得吗?是否有另一种避免两个ViewModel字段的解决方案?谢谢 – Patrick

+0

这些属性应该在您的视图模型上,而不是在您的域模型上。在您的域模型上,您可以拥有一个属性。但是在视图模型中(这是你应该传递给视图的东西),你完全可以拥有2个属性。我希望你没有将你的领域模型传递给观点,是吗? –

+0

嗨,当然,我只有1个属性在域中传递给DTO,然后传递给ViewModel。如果Automapper映射从Viewmodel返回值到DTO,只传递不为null的值(Price或MaxPrice),则此处避免产生if条件。我想避免这种情况,并且只有一个字段,当然,如果可能的话,以避免映射过程中的这种变化。 – Patrick

相关问题