2012-01-04 78 views
1

我對asp.net mvc很新穎。我想獲取我的網址中的參數字符串值不能爲空。參數名稱:asp.net mvc中的字符串C#

http://localhost/Item/ItemSpec/3431?dep=62&cat=129&tab=2 

如何獲得值= 3431?我試過使用HttpContext.Current.Request.QueryString["id"],但它不起作用。 3431是顯示在我的頁面中的項目的id,這就是我使用[「id」]的原因。

非常感謝。

回答

2

3431是請求的路徑的一部分,而不是查詢字符串的一部分。你可能使用HttpRequest.Path來獲取路徑,但MVC路由應該允許你簡單地寫一個控制器方法,接受ID作爲參數。我建議你閱讀how to configure routing。 (只是在尋找,ASP.NET路由或MVC路由會給你很多文章

+0

它可以通過正則表達式或其他路由旁邊的其他功能嗎? – titi 2012-01-04 07:55:16

+2

@titi - 當然,你可以,但那麼你會有2個問題 – 2012-01-04 08:25:26

+1

@titi:可能 - 但你爲什麼要?路由爲你解決了這個問題 - 爲什麼把事情變得更復雜? – 2012-01-04 08:26:42

2

假設默認路由在Global.asax中配置({controller}/{action}/{id}),你可以有你的控制器動作以ID參數和默認的模型綁定會自動將其值設置:

public ActionResult Foo(string id) 
{ 
    ... 
} 

如果你想從確實有權訪問你需要從RouteData獲取它的HttpContext你的代碼的一些其他部分取值這個ID:

var id = HttpContext.Request.RequestContext.RouteData["id"]; 

RouteData適用於所有標準MVC位置。在你的例子中,你已經使用了靜態的HttpContext.Current屬性,這是你永遠不應該使用的東西。我懷疑你試圖從你不應該訪問HttpContext的部分代碼中獲取這個id。因此,您最好使用標準技術獲取此id,然後將其作爲參數傳遞給代碼的其他部分。

1

如果項目是你的控制器,並ItemSpec是行動,你可以通過

public ActionResult ItemSpec(int id) { } 

你的路由,必須設置以獲取編號:

context.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index" } 
); 
0

如果你沒有改變你的路由,所以它仍然被定義爲當你創建Asp.net MVC Web項目時,那麼這應該是你的控制器之一:

public class ItemController : ControllerBase 
{ 
    ... 

    public ActionResult ItemSpec(int id, int dep, int cat, int tab) 
    { 
     // implementation that uses all four values 
    } 

    ... 
} 

這當然只是其中的一個操作。也可能有其他人。最有可能的是默認生成的Index,默認情況下也使用該路由...