2017-03-03 24 views
0

我們有下拉列表,其中的選項可以根據誰在使用該應用程序而有所不同。這個想法是創建下拉選項枚舉和它做附加到<select>標籤以下內容:乾淨的方式來動態綁定枚舉選擇下拉菜單?

public ListOfEnums? PropertyValue { get; set; } 

public enum ListOfEnums 
{ 
    OptionA, 
    OptionB 
} 

public enum ListOfEnumsAlternate 
{ 
    OptionY, 
    OptionZ 
} 

<select asp-for="PropertyValue" asp-items="Html.GetEnumSelectList<ListOfEnums>()"></select> 

如果下拉選項是靜態的這個偉大的工程。但是,在我們的應用程序中,選項可以根據以前字段的回答方式或基於其他屬性值進行更改。所以在某些情況下我們可能需要顯示ListOfEnumsAlternate

是否有一個乾淨的方式來實現這一點,仍然使用枚舉或不同的選項(客戶端與jQuery?)會更好?

+2

這是javascript的設計目的。對於很少/很簡單的東西,一些簡單的jquery可能就足夠了。對於任何更復雜的事情,您可能想要使用ReactJS或Angular來查看客戶端渲染,否則事情可能會很快失去控制。 – caesay

+1

只要你說「選項可以根據以前的字段的回答而改變」,你就在談論客戶端交互,然後需要AJAX來獲取新信息。 –

+0

'PropertyValue'是'ListOfEnums',所以它只會綁定到'OptionA'或'OptionB'的值。你需要在你的視圖模型中綁定一個單獨的屬性來綁定到'ListOfEnumsAlternate' –

回答

0

由於頁面是由服務器生成的,所以在沒有客戶端代碼的情況下執行此操作的唯一方法是在填充前一個字段後調用服務器。這是一個沉重的行爲,在你的情況下似乎不需要。

處理此問題的最佳方法是在您的頁面中放置兩個下拉列表(一個使用ListOfEnums,另一個使用ListOfEnumsAlternate)。

然後,您只顯示其中一個使用JavaScript代碼時填充前一個字段。

+1

如果我有兩個''將不會有任何客戶端驗證(不會生成'data-val- *'屬性) –

+0

@StephenMuecke,所以它在我看來這不是一個好的選擇。謝謝。 –