2016-10-11 49 views
0

在C#ASP.NET MVC項目中,我有一個操作,收到Dictionary<string, T>T類型不是很重要,我認爲)作爲參數。我也希望該參數是可選的,默認值爲null避免字典<string, T>被綁定到所有查詢字符串參數

但是,如果我在調用動作時沒有指定該參數,我仍然會得到它,它是一個填充了所有查詢字符串鍵值對的字典。

我的理解是,MVC框架試圖將參數綁定到查詢字符串,並且因爲它是一個帶有字符串鍵的字典,查詢字符串中鍵值對的集合對於數據綁定機制來說是合適的數據。

但我需要能夠收到null無論如何參數。而且我也不允許在路線值中明確地通過null。我怎樣才能防止發生查詢字符串數據綁定?

+0

您能否提供一些控制器簽名的示例代碼和觸發不需要綁定的請求?你在哪個版本的.Net和MVC上? –

回答

2

而不是定義你的模型作爲PARAM字典創建了一個模型,將需要更明確的結合

喜歡的東西

ModelClass { 
    string SomeName {get;set;} 
    T Internal {get;set;} 
} 

public ActionResult YourAction(ModelClass boundInstance){} 

這肯定不會坐上開往隨機查詢字符串參數。但請注意,定義爲可選參數的所有模型對象都不會爲空,它們只會包含空數據,即使在您的情況下,如果沒有查詢字符串參數,您仍會以構造但空的Dic()結束。在嘗試綁定數據之前,默認模型聯編程序會調用任何參數空構造函數,以便即使沒有數據可以綁定到該數據,也會構造該對象。

其他選項 - 如果你從後獲得字典數據僅供規劃可以將屬性[FromBody]添加到結合​​

public ActionResult YourAction([FromBody]Dictionary<string, T> boundInstance){} 

咆哮:避免使用泛型集合類型爲動作參數,你可以完全避免這些問題。

+0

恐怕您的解決方案是唯一的解決方案:-(感謝您指出我正確的方向,並提示有關動作參數始終在構建中! – Simone

相關問題