C# 提交表单时获取查询字符串值…MVC3

C# 提交表单时获取查询字符串值…MVC3,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,在我的MVC3应用程序中,如果我在url中键入查询字符串值并按enter键,我可以得到我键入的值: localhost:34556/?db=test 我将触发的默认操作: public ActionResult Index(string db) 变量db中有“test” 现在,我需要提交表单并读取查询字符串值,但是当我通过jQuery提交表单时: $('#btnLogOn').click(function(e) { e.preventDefault();

在我的MVC3应用程序中,如果我在url中键入查询字符串值并按enter键,我可以得到我键入的值:

localhost:34556/?db=test
我将触发的默认操作:

public ActionResult Index(string db)
变量db中有“test”

现在,我需要提交表单并读取查询字符串值,但是当我通过jQuery提交表单时:

       $('#btnLogOn').click(function(e) {
         e.preventDefault();
             document.forms[0].submit();
         });
下面是我发送的表格:

   @using (Html.BeginForm("LogIn", "Home", new { id="form1" }, FormMethod.Post))
行动如下:

  [HttpPost]
    public ActionResult LogIn(LogOnModel logOnModel, string db)
    {
        string dbName= Request.QueryString["db"];
     }

变量dbName为null,因为Request.QueryString[“db”]为null,所以传入的变量db也是null,我不知道为什么。提交表单后,有人能帮我获取查询字符串变量吗?谢谢

因为您正在使用POST,所以您要查找的数据是在
Request.Form
中,而不是
Request.QueryString
作为@ThiefMaster♦ 也就是说,在POST中您不能拥有查询字符串,如果您不想将数据序列化到特定对象,则可以使用
FormCollection对象
,它允许您将所有表单元素通过POST传递到服务器

比如说

[HttpPost]
public ActionResult LogIn(FormCollection formCollection)
{
    string dbName= formCollection["db"];

}

你可以吃点像这样的东西

控制器:

[HttpGet]
public ActionResult LogIn(string dbName)
{
    LogOnViewModel lovm = new LogOnViewModel();
    //Initalize viewmodel here
    Return view(lovm);

}

[HttpPost]
public ActionResult LogIn(LogOnViewModel lovm, string dbName)
{
    if (ModelState.IsValid) {
        //You can reference the dbName here simply by typing dbName (i.e) string test = dbName;
        //Do whatever you want here. Perhaps a redirect?
    }
    return View(lovm);
}
视图模型:

public class LogOnViewModel
{
    //Whatever properties you have.
}

编辑:根据您的要求进行修改。

查询字符串在表单中不可见。帖子:谢谢您的回复,那么我的选择是什么?我必须保留查询字符串BTW。另一种方法是在GET中使用查询字符串来填充表单中的隐藏输入。然后隐藏的输入将以submit.Thaks进行发布以进行回复,但Request.Form[“db”]也为空。FormCollection对象是否具有我的登录信息?正在传递的模型具有用户名/密码等。它包含您在表单中传递的所有元素,如果您的登录信息在表单内部,它将显示在表单集合上。感谢您的评论。这看起来和我现在做的很相似。从查询字符串中获取值的逻辑在哪里?呃,此方法的要点是查询字符串中没有值,您只需将其分配给表单中的viewmodel。类似于@Html.Textboxfor(model=>model.dbName等)。如果你真的想把它放在URL中(SEO目的?),我想你可以在@using中添加一个参数(Html.BeginForm(“LoginForm”,“Home”,new{.id=“form1”,.dbName=YourFormFieldValueHere},FormMethod.Post))呃,我的问题是如何获取查询字符串值?没有其他办法。如果我能走另一条路,我会的。但是商业规则说我们使用查询字符串,我不拥有公司。谢谢你,试试我的编辑。HTTPPost部分下的注释应允许您访问URL的dbName部分。你不需要做一个请求。只需将您想要的变量设置为dbName即可。