2012-07-05 43 views
1

爲什麼我們有這種行爲?列表<int>參數默認綁定來自url參數behavour

控制器動作:

public ActionResult TestProc(List<int> list) 
{ 
    return new ContentResult(); 
} 

請求:

/TestProc 導致空列表。 OK

/TestProc?list = [] 會導致一個空的列表。 OK

/TestProc?list = 導致一個項目的列表爲0。我假設活頁夾看到查詢字符串存在,它沒有值,因此它將列表中的默認int值推入,即它將list =與list = 0相同。我覺得這很混亂。我會認爲list =在這個上下文中完全沒有任何列表,我期望列表爲null。

+0

合理的假設...... w –

回答

0

我覺得迷惑

我同意。你可以在這種情況下使用空整數:

public ActionResult TestProc(List<int?> list) 

這次模型綁定將推動一個元素,它null,你就可以,如果你不得不/TestProc?list=/TestProc?list=0之間的歧義。

+0

是的,你甚至可以爭辯說,任何時候(除非有例外)模型聯編程序看到非空類型的空值,它應該將其視爲具有無效字符。但是我猜如果你考慮一個整數的行爲,它可以是預期的行爲。由於?list = 0&list = 1會綁定到list = {0,1} – parKing