62

我是 C#.net MVC 的新手,正在尝试添加FullCalendar到 MVC 应用程序。

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

我在 Webforms 应用程序中使用的方法不起作用。我需要向控制器添加什么来访问querystring变量?

4

6 回答 6

94
public ActionResult SomeAction(string start, string end)

框架会将查询字符串参数映射到方法参数。

于 2012-07-15T01:44:29.957 回答
77

我想通了……终于找到了另一篇关于它的文章。

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

string end = Request.QueryString["end"];
于 2012-07-14T23:58:11.780 回答
4

戴维斯,我和你有同样的问题。MVC 并不直观,而且在他们设计它时,孩子们似乎并不了解直观的 MVC 查询字符串系统的目的或重要性。

根本没有在路由中设置查询字符串(RouteConfig)。它们是控制器中操作的附加“额外”参数。这非常令人困惑,因为 Action 参数旨在处理路径和查询字符串。如果您添加了参数但它们不起作用,请为查询字符串添加第二个,如下所示:

这将是您在 Controller 类中捕获 ID 的操作(实际上只是在 RouteConfig 文件中设置的路径,作为 MVC 中的典型默认路径):

public ActionResult Hello(int id)

但是要捕获查询字符串,需要在控制器中添加一个附加参数(顺便说一下,这不是在您的 RouteConfig 文件中设置的):

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

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

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

我发现这让我自己非常困惑,所以你并不孤单!他们应该设计了一种简单的方法来为 RouteConfig 文件配置设计中的特定命名字符串、任何查询字符串名称和任意数量的查询字符串添加查询字符串路由。如果不这样做,它会使 MVC Web 应用程序中查询字符串的整个使用变得可疑,这很奇怪,因为自 1990 年代中期以来,查询字符串一直是万维网的稳定部分。:(

于 2017-06-29T12:59:55.200 回答
1

这是我想出的。我在这方面遇到了重大问题,并且相信我现在在 MVC 6 中,但这可能对将来甚至我自己的人有所帮助..

//问题是 Reqest.Form Request.Querystring 和 Request 在 MVC 中不起作用,解决方案是使用 Context.Request.Form 并确保表单已提交,否则会出现空引用或上下文问题错误。

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

     }
于 2016-08-29T16:23:26.090 回答
1

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

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

无论我插入查询字符串还是key=""结果如何。

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

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

现在

prices/{key} 

或者

prices?key={key} 

两者都工作正常。

于 2017-08-10T03:07:51.843 回答
0

我从 ApiController 而不是常规的 Controller 类继承时遇到了这个问题。我通过使用解决了它 var container = Request.GetQueryNameValuePairs().ToLookup(x => x.Key, x => x.Value);

我关注了这个线程如何获取请求查询字符串值?

编辑:尝试过滤容器后,我收到了奇怪的错误消息。转到我的项目属性后,我取消选中了优化代码复选框,该复选框发生了变化,突然间,我的控制器中的参数从我想要的 url 中填充了。

希望这会帮助有同样问题的人..

于 2020-02-26T07:12:58.327 回答