3
我有一個mvc DropDownList的問題,很多的話題,但沒有一個具有相同的問題。asp.net mvc 5 DropDownList可空int的默認選項不爲空
我想爲我的DropDownList默認選擇的選項,但我也需要額外的選項「所有」項目的選擇。
的2所以我控制器綁定默認值到下拉
public ActionResult Index(int? All = 2){ ...
在CSHTML我有
@Html.DropDownList("All","All items")
所有列表充滿這樣
ViewData["All"] = new SelectList(CommonLists.property_types.Select(x => new { v = x.Value, t = x.Key.ToLower() }), "v", "t", All);
property_types
public static Dictionary<string, int> property_types = new Dictionary<string, int>() {
{ "House", 1 }, { "Flat", 2 }, { "Garden", 3 }
因此,它應該像這樣工作
- 當第一次進入默認選擇的值是2,等於「扁平化」,只顯示「扁平化」項目(工程)
- 用戶可以將其更改爲從列表中的其他選項(作品)
- 用戶可以更改查看所有項目一次不管類別中選擇「所有項目」(這是不工作)
我假定它應該工作,但我驚訝,當我選擇「所有項目s「mvc不返回null它只是返回默認的int值,所以基本上沒辦法查詢所有項目。
這是否應該這樣工作?自動生成的「所有項目」是空值,所以我認爲mvc會將它翻譯爲空,但事實並非如此。
如何解決這個問題?
當時懷疑這將是這種情況下,MVC應該在這次更聰明,如果他們提供了添加默認選項一個選項,它應該,如果它返回null有空值,而不是我的默認值2,特別是如果它是可空的int。也許最好使用自定義參數綁定器修復它,會看到。 – Programista
這不是MVC的問題。你賦予null值雙重含義。 'null'從回發意味着「所有項目」,而最初的'null'意味着「取得默認值」。如果你刪除'= 2'到你的動作。然後你以前的代碼將工作,但默認值是「所有項目」,而不是「平坦」 –
是的,這是一個MVC問題。 如果我沒有提供任何值,意味着沒有形式POST「全部」字段發送它應該是2,但是如果我選擇「所有項目」表單POST字段「全部」值爲空發送,控制器應該然後獲得一個空值。 這不是一個雙重含義的問題,它是一個問題,即mvc無法識別請求中的POST字段與POST字段之間但具有空值的情況,這是兩個不同的事情。 事實上,它應該以最直觀的方式工作,就像我在我的問題中所展示的那樣簡單,沒有必要的解決方法,但它不會。 – Programista