2014-03-26 59 views
0

我有一個混合的應用程序,這是經典的asp.net和MVC兩者。這是asp.net 4.5和MVC 4路由guid爲空

問題: 從路線,我可以得到的動作就好了,但GUID總是想出空。你看到我的實現中可能缺少的任何東西嗎?問題出在SiteMyHome路線上。

路線

public static void RegisterRoutes(RouteCollection routes) 
    { 

     routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 
     //Ignore calls to httphandlers 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      RouteConstants.SiteMyHome, 
      RouteConstants.SiteMyHome + "/{guid}/{ccode}/{tab}", 
      new { controller = ControllerNames.SiteRouter, action = ActionNames.SiteMyHome, ccode = UrlParameter.Optional, tab = UrlParameter.Optional } 
     ); 


     //Set the default route 
     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 
    } 

行動

public ActionResult SiteMyHome(Guid? guid, string ccode, string tab) 
    { 
     return null; 
    } 

測試 /SiteMyHome/9c95eb0-d8fb-4176-9de0-5b99f8b914db /測試/匹配

當我調試我的行動,我得到foll欠款

guid = null 
ccode = test 
tab = matched 

爲什麼guid在這裏作爲null傳遞?

現在,當我改變行動字符串指導然後我得到它的價值就好(圖片附加)。我很困惑...

public ActionResult SiteMyHome(string guid, string ccode, string tab) 

enter image description here

+0

正如你所做的Guid它意味着這個動作參數是可選的可爲空場。因此,您可以嘗試在相關MapRoute中包含「guid = UrlParameter.Optional」,因爲我認爲這可能會解決問題。 –

+0

如果我不讓它爲空,那麼我會得到一個錯誤,因爲null傳遞給動作。錯誤發生後,我將其更改爲可空字段以檢查其值。 –

回答

0

這是一個GUID的問題。我正在測試的GUID不是有效的GUID,因爲d04e9071-0cdf-4aa8-8f34-b316f9f3c466導致了一個有效的GUID。