我对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