2015-03-13 20 views
2

我在我的MVC4項目(vs2010)中有以下代碼,我是這個MVC的東西的新手。請幫助MVC 4操作方法可空字符串參數要求錯誤

public ActionResult ViewAlbum(string id) 
    { 
      var searchStr = id; 
      TB_ALBUM_MASTER tb_album_master = db.TB_ALBUM_MASTER.Single(t => t.ALBUM_NAME.ToLower() == searchStr.ToLower()); 
      if (tb_album_master == null) 
      { 
       return HttpNotFound(); 
      } 
      return View(tb_album_master); 

    }` 

它給我的行動方法定義行此錯誤

錯誤131型「字符串」必須是爲了用它作爲參數「T」非空值類型在泛型類型或方法 'System.Nullable'

這裏是我的RouteConfig.cs

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

你是怎麼調用這個動作方法的?向我們展示該代碼。 – SBirthare 2015-03-13 06:46:13

+0

@SBirthare瀏覽到localhost:1507/albums/viewalbum/Album%20One – 2015-03-13 07:01:58

+0

不應該是'localhost:1507/Albums/ViewAlbum/Album%20One'? – 2015-03-13 07:05:58

回答

0

最後,我開始知道我需要修復RouteConfig.cs以啓用我的新路由,其中​​id參數將成爲字符串,並且可以爲空。

因此,這裏是我的解決辦法:這是我的新RouteConfig.cs

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Defaults", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = "" } 
     ); 

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

    } 

(請給我建議,如果它的錯誤的方式來處理這種異常或是否有任何其他修復這一點。)

+0

我仍然不確定爲什麼添加這條明確的路線解決了您的問題。首先,我無法在默認應用程序中重現它。其次,即使你能夠複製,第二條路線的差異。第一條路線是相同的,保持id可選。 – SBirthare 2015-03-13 07:55:41

0

此錯誤消息:

錯誤131的類型「字符串」必須是一個非空值類型,以便在通用類型或方法「System.Nullable」

使用它作爲參數「T」

指示您正嘗試將字符串用作System.Nullable的參數。 System.Nullable僅適用於值類型,該字符串不是,它是一個引用類型(並且可以爲空)。

如果您在某處寫入Nullable<string>string?,則會出現這種情況。這與路由無關,所以你聲稱改變你的路由解決了這個問題似乎是不可能的。

要解決此問題,首先需要確定您嘗試創建可空字符串的位置,然後從中刪除可空對象。

+0

我明白了你的觀點,但是我使用添加模型嚮導從數據庫創建了我的edmx模型。它沒有定義任何像string?'或Nullable '這樣的字符串。通過改變路線,我可以路由到特定的行動方法。 – 2015-03-13 08:23:13