2013-01-22 86 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

相關問題