2017-03-21 69 views
0

當試圖將參數傳遞到一個簡單的控制器I接收參數一如既往被空。MVC uri參數是空

控制器

public class GetOrgController : Controller 
{ 
    private DirectoryEntities de; 

    public getOrgController() 
    { 
     de = new DirectoryEntities(); 
    } 
    // GET: getOrg 
    public ActionResult Index(string district) 
    { 
     getorg_Result org = de.getorg(district).FirstOrDefault(); 
     return View(org); 
    } 
} 

當我嘗試導航到該網址與參數localhost:660366/GetOrg/Index/D123區變量始終是null

我想也許這不得不做一些與默認RouteConfig。當我在默認路由配置之前放置一個新值時,它就起作用了!但是現在,無論何時我嘗試啓動應用程序,它都會首先進入GetOrgController。當我想要一個具有不同參數的新控制器時會發生什麼?我每次都必須這樣做?這是我的新的RouteConfig與新條目。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

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

我實際上開始在Web Api 2中開始做Rest,但是視圖模型吸引了我到MVC。在方法之上指定我想要的路線/參數在下面會更容易。這是可能的MVC?

WebApi2

[Route("Index/{district}")] 
public ActionResult Index(string district) 
{ 
    getorg_Result orgs = de.getorg(district).FirstOrDefault(); 
    return View(orgs); 
} 

上述方法似乎不是必須依賴控制器在RouteConfig

+1

爲什麼不只是名稱區標識? –

+0

'...我想下面。這在MVC中可能嗎?'<=看起來這是可能的。請參閱[MVC 5路由屬性](http://stackoverflow.com/a/38103475/1260204)。 – Igor

+1

像@ErikPhilips下面回答,你的兩條路線相互衝突。它們是完全相同的,第一個被擊中的將是定義列表中的第一個。 – Igor

回答

1

這兩條航線從字面上沒有任何意義,你可以使用默認的路由,爲此目的無需額外的途徑。第一個說,對於任何控制器任何法默認爲GetOrgController。這是不是你想要的,因爲現在id不會爲所有其他控制器的工作和第二MapRoute接近重複。

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

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

你真正應該做的是說與GetOrg開始,然後調用GetOrgController任何方法的調用....

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

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

這就是是正確的順序,因爲這兩個擊潰是通用這就是爲什麼這麼多清潔點擊默認的第路線,以便您可以刪除UrlParameter.Optional,這樣的路線應該稍微具體

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

,但仍除非你想使用自定義的網址像random/234