C# 在MVC控制器中使用查询字符串变量

C# 在MVC控制器中使用查询字符串变量,c#,asp.net-mvc,query-string,C#,Asp.net Mvc,Query String,我是C#.net MVC新手,正在尝试向MVC应用程序添加FullCalendar FullCalendar脚本会自动将?start={}&end={}添加到URL…这很好,但我不知道如何在控制器中使用querystring变量 我在Webforms应用程序中使用的方法不起作用。我需要向控制器添加什么才能访问querystring变量?我找到了它…最后在它上找到了另一个 框架将把查询字符串参数映射到方法参数 这是我想到的。我在这方面遇到了很大的问题,我相信我现在在MVC6中,但这可能对将来的人甚

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

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


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

我找到了它…最后在它上找到了另一个


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

这是我想到的。我在这方面遇到了很大的问题,我相信我现在在MVC6中,但这可能对将来的人甚至我自己都有帮助

//问题是Request.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

     }

大卫,我和你有同样的问题。MVC不是直观的,当他们设计MVC时,孩子们似乎不理解MVC的直观查询系统的目的或重要性

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

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

但要捕获查询字符串,需要在控制器中添加一个附加参数(顺便说一句,该参数未在RouteConfig文件中设置):

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

如果要在RouteConfig文件中创建一个没有“id”路径的“自定义路由”,可以在该文件中的操作后取消“id”或其他参数。在这种情况下,控制器中动作方法中的参数将只处理querystring


我发现这让我自己非常困惑,所以你并不孤单!他们应该已经设计了一种简单的方法来为RouteConfig文件配置设计中的特定命名字符串、任何querystring名称和任意数量的querystring添加querystring路由。如果不这样做,MVC web应用程序中QueryString的整个使用都会受到质疑,这非常奇怪,因为自20世纪90年代中期以来,QueryString一直是万维网的稳定组成部分:(

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

routes.MapRoute(
    "apiRoute", 
    "api/{action}/{key}", 
    new { controller = "Api", action = "Prices", key = ""}
);
无论我在查询字符串中插入了什么,或者如何只显示
key=”“
结果

然后使用UrlParameter消除默认覆盖。可选:

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


两者都可以正常工作。

我从ApicController而不是常规控制器类继承时遇到了这个问题。我通过使用
var container=Request.GetQueryNameValuePairs().ToLookup(x=>x.Key,x=>x.Value);

我沿着这条线走

编辑: 在尝试筛选容器后,我收到了奇怪的错误消息。在转到我的项目属性并取消选中“优化代码”复选框后,该复选框发生了更改,因此控制器中的参数突然从url中填充,如我所愿


希望这能帮助有同样问题的人。

这个问题似乎很模糊。你需要提到你正在使用的框架/语言。很抱歉,我在上面更正了它。我已经尝试过了,但从未分配过参数。我不知道querystring参数是否为UnixtTimeStamps,但两者都不是当我尝试此方法时,double或sting没有任何值。此方法对我有效。重要的是要注意变量名必须完全匹配。如果在route config中有参数的默认值,此默认值将覆盖查询字符串值。在MVC术语中,这是唯一正确的方法。如果它不适用于您,请确保变量名与您的查询参数名完全匹配。如果它仍然不适用于您,请转到RouteConfig.cs并查看您的路由-可能存在配置不正确的情况。找到我的答案,是的,它只会说这在MVC中的执行方式是错误的。请检查Maess的正确答案。这是like试图找出如何解一个魔方,然后最后,你只需剥掉标签并将其放回解出的位置。这更像是将魔方称为魔方。这可能不是首选方法,也不是最常用的方法,但它实现了结果,现在开始解更大的魔方d更好的问题。无论如何,我用它来检索url编码的url重定向路径,该路径在嵌入url时会产生错误。我不确定这是否是首选方法,但我也对在我生命中的某个时刻从Rubix多维数据集上剥下标签感到内疚。继续……很可能你想在控制器a中这样做我不想错过MVC的要点。是的,我有一个例子,我希望查询字符串键是可变的(用户可以执行“?max=true”或“?max=true”),在这种情况下,控制器方法中的标准MVC变量名似乎对我没有任何帮助,因为我只能选择一个。这个答案似乎是这个用例的解决方案
public ActionResult Hello(int id)
public ActionResult Hello(int id, string start, string end)
routes.MapRoute(
    "apiRoute", 
    "api/{action}/{key}", 
    new { controller = "Api", action = "Prices", key = ""}
);
routes.MapRoute(
    "apiRoute", 
    "api/{action}/{key}", 
    new { controller = "Api", action = "Prices", key = UrlParameter.Optional }
);
prices/{key} 
prices?key={key}