2012-11-23 54 views
6

我有一個控制器的方法:可選參數總是充滿

public ActionResult SendNotification(Guid? id=null, SendNotification notification =null) 

它響應/Apps/SendNotification/{guid}?{SendNotification properties}

sendNotification的是一個多字符串屬性的模型。

我的問題是SendNotification從不爲空。無論我如何調用.NET,似乎總是實例化一個SendNotification對象(所有字段爲空)。

我甚至用System.Web.Http.FromUriSystem.Web.Http.FromBody進行了測試,它仍然是這樣做的。

任何想法?

注意:這不是WebApi。這是常規的MVC。

我的項目只有缺省路由:

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
+0

你的路線是什麼? –

+0

已在上面添加。請注意:在我的原始發佈中,我的請求的Url中存在錯誤(我對其進行了修復)。 – rufo

回答

2

也就是說模型綁定欺騙你。

由於它沒有找到任何綁定到模型的參數,所有屬性都是空的,但模型仍然默認實例化。

而不是檢查模型爲null,檢查您的主要屬性之一(如ID)爲空。

+1

好的...解決方法可以工作,但是,這對我來說似乎是一個錯誤。爲什麼C#必須在沒有數據導致的情況下實例化模型。 – rufo

+0

我不認爲它是bug。模型聯編程序需要實例化模型,以便知道要查找哪個參數。然後,它將值綁定到匹配的屬性,如果沒有找到,則沒有任何綁定。 –

+0

好的。我已經接受它作爲答案(儘管我不太喜歡C#使用的邏輯)。謝謝。 – rufo