在MVC3中使用带有表单的查询字符串

时间:2012-05-23 20:40:38

标签: c# asp.net-mvc-3

我有一个带有表单的MVC3视图,我想通过查询字符串传入一个参数。继承人我的表格

@using (Html.BeginForm("LogOn", "Account", new { db = @Request.QueryString["db"] }, FormMethod.Post))

继承我的控制器

[HttpPost]
public ActionResult LogOn(LogOnModel model,string db)

当我单击“登录”按钮并单步执行代码时,param db为null。我像这样传递它:

  http://localhost:64632/?db=someValue

我的路线如下:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{db}", // URL with parameters
        new { controller = "Account", action = "LogOn", db = UrlParameter.Optional           } // Parameter defaults
);

我做错了什么?

4 个答案:

答案 0 :(得分:1)

您的路由期望db成为网址中的标记:

http://localhost:64632/Account/LogOn/someValue

您可以从控制器中的查询字符串中获取值,并将db参数存储在ViewBag中,它将在您的表单中提供。

答案 1 :(得分:1)

如果这是你唯一的路线,那么你当前所在的页面可能就像“/ controller / action / dbValue”。在这种情况下,

@Request.QueryString["db"]

不会获取任何内容,因为db是路由值,它不是查询字符串的一部分。你可以用

@ViewContext.RouteData.Values["db"]

代替。

答案 2 :(得分:1)

有效。我也在做同样的事情。我可以在http帖子Request["queryparametername"]

上检索查询字符串值

答案 3 :(得分:0)

好吧,这是一个get方法链接:“http:// localhost:64632 /?db = someValue”

并且您使用了HttpPost属性。