在MVC控制器中使用查询stringvariables

我是C#.net MVC的FullCalendar ,并试图将FullCalendar添加到MVC应用程序。

FullCalendar脚本会自动将?start={}&end={}到URL中,这很好,但我不知道如何在控制器中使用querystringvariables。

我在Webforms应用程序中使用的方法不起作用。 我需要添加到控制器访问querystringvariables?

 public ActionResult SomeAction(string start, string end) 

框架将查询string参数映射到方法参数。

我想通了…终于find了另一篇文章 。

 string start = Request.QueryString["start"]; string end = Request.QueryString["end"]; 

戴维斯,我有和你一样的问题。 MVC并不直观,似乎当他们devise的时候,kiddos并不了解MVC的直观查询string系统的目的或重要性。

查询string没有在路由中设置(RouteConfig)。 它们是“控制器”中“操作”的附加“额外”参数。 这是非常混乱的行动参数被devise来处理两个path和Querystrings。 如果你添加了参数,但它们不起作用,为查询string添加第二个参数,如下所示:

这将是你的控制器类中的动作,它捕获了ID(实际上它只是在RouteConfig文件中设置的path,作为MVC中典型的默认path):

 public ActionResult Hello(int id) 

但是要捕获查询string,控制器中的其他参数需要添加(顺便说一下,在RouteConfig文件中没有设置):

 public ActionResult Hello(int id, string start, string end) 

假设在RouteConfig.cs中将“id”设置为可选,现在会监听“/ Hello?start =&end =”或“/ Hello /?start =&end =”或“/ Hello / 45?start =&end =文件。

如果您想在RouteConfig文件中创build一个没有“id”path的“自定义路由”,则可以在该文件的操作之后,将“id”或其他参数省略。 在这种情况下,控制器中的Action方法中的参数只处理querystrings。

我发现自己非常困惑,所以你并不孤单! 他们应该devise一个简单的方法为RouteConfig文件configurationdevise中的特定命名string,任何查询string名称和任意数量的查询string添加查询string路由。 如果不这样做,那么在MVC Web应用程序中使用querystrings就成了一个问题,这是非常奇怪的,因为从90年代中期开始,querystrings一直是万维网的一个稳定部分。 🙁

我的问题是用默认值覆盖我的查询string参数:

 routes.MapRoute( "apiRoute", "api/{action}/{key}", new { controller = "Api", action = "Prices", key = ""} ); 

不pipe我插入查询string或只有key=""结果。

然后使用UrlParameter.Optional摆脱默认覆盖:

 routes.MapRoute( "apiRoute", "api/{action}/{key}", new { controller = "Api", action = "Prices", key = UrlParameter.Optional } ); 

现在

 prices/{key} 

要么

 prices?key={key} 

两者都很好。

这是我想出来的。 我有这个问题,并相信我现在在MVC 6,但这可能会有所帮助,甚至有人甚至在未来..

//问题是Reqest.Form Request.Querystring和Request不能在MVC中工作,解决方法是使用Context.Request.Form,并确保表单已经提交,否则将会显示null引用或上下文问题错误。

  if(Context.Request.ContentLength != null) { String StartDate = Context.Request.Form["StartMonth"].ToString(); String EndMonth = Context.Request.Form["EndMonth"].ToString(); // Vendor }