2012-07-09 45 views
1

我有這樣當我將參數值傳遞爲null時,爲什麼我得到「參數字典包含參數x的空條目」?

[HttpPost] 
public ActionResult DoSearchRequestOperation(SearchRequestModelDto data) 
{ 
    //.. 
} 

一個操作方法,當我我們這次URL字符串http://localhost:9124/Search/SearchRequest?searchRequestFor=0,它的工作原理。但是當我使用的URL http://localhost:9124/Search/SearchRequest?searchRequestFor=,它拋出這個異常

System.ArgumentException:參數字典包含參數空 進入「searchRequestFor」非空類型 「的xxxx.Shared.Dto.Process .Search.SearchRequestFor '的方法 'System.Web.Mvc.ActionResult SearchRequest(xxxx.Shared.Dto.Process.Search.SearchRequestFor)' 在 ' xxxx.WebServer.UI.Controllers.SearchController

如果用戶給第二個url,它應該取值0。

我試着改變下面的maproute,但那也行不通。

routes.MapRoute(
      "Default1", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Dashboard", id = 0 } 
     ); 

這裏是SearchRequestModelDto類

[DataContract] 
public class SearchRequestModelDto : UIBoundDto 
{ 
    public SearchRequestModelDto() 
    { 
     Criteria = new SearchRequestCriteriaDto(); 
     SearchResult = new SearchRequestResultDto(); 
    } 

    [DataMember] 
    public SearchRequestCriteriaDto Criteria { get; set; } 

    [DataMember] 
    public SearchRequestResultDto SearchResult { get; set; } 
} 

回答

-1

你可以讓你的SearchRequestModelDto視圖模型一個空整數的SearchRequestFor財產,如果你希望能夠在查詢字符串中發送空值:

public int? SearchRequestFor { get; set; } 

事實上,您在路線中設置了id=0對查詢字符串參數沒有任何影響。它們不受路由支配,因此您必須編寫自定義模型綁定器或在模型上使用可爲空的整數。後者是優選的。

+0

上述解決方案不工作我仍得到相同的異常SearchRequestFor類型應爲空。我將在上面添加SearchRequestModelDto類定義。 – 2012-07-09 06:09:43

+0

是的,顯示你的'SearchRequestModelDto'類會有所幫助。 – 2012-07-09 06:11:44

+0

SearchRequestCriteriaDto和SearchRequestResultDto在int和int中都包含很多屬性?類型。 是那些導致問題的int屬性。 – 2012-07-09 06:14:29

0

這是因爲

public ActionResult SearchRequest(SearchRequestFor? searchRequestFor) 
{ 
    //... 
} 
相關問題