我對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」]的原因。
非常感謝。
我對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」]的原因。
非常感謝。
3431
是請求的路徑的一部分,而不是查詢字符串的一部分。你可能使用HttpRequest.Path
來獲取路徑,但MVC路由應該允許你簡單地寫一個控制器方法,接受ID作爲參數。我建議你閱讀how to configure routing。 (只是在尋找,ASP.NET路由或MVC路由會給你很多文章)
假設默認路由在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
,然後將其作爲參數傳遞給代碼的其他部分。
如果項目是你的控制器,並ItemSpec是行動,你可以通過
public ActionResult ItemSpec(int id) { }
你的路由,必須設置以獲取編號:
context.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index" }
);
如果你沒有改變你的路由,所以它仍然被定義爲當你創建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
,默認情況下也使用該路由...
它可以通過正則表達式或其他路由旁邊的其他功能嗎? – titi 2012-01-04 07:55:16
@titi - 當然,你可以,但那麼你會有2個問題 – 2012-01-04 08:25:26
@titi:可能 - 但你爲什麼要?路由爲你解決了這個問題 - 爲什麼把事情變得更復雜? – 2012-01-04 08:26:42