6

在我的 MVC3 应用程序中,如果我在 url 中输入一个查询字符串值并按回车键,我可以获得我输入的值:

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 为空,因为 Request.QueryString["db"] 为空,传入的变量 db 也是如此,我不知道为什么。提交表单后,有人可以帮我获取查询字符串变量吗?谢谢

4

3 回答 3

4

你可以有类似的东西

控制器:

[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.
}

编辑:根据您的要求对其进行修复。

于 2012-07-09T21:01:41.000 回答
3

由于您使用的是 POST,因此您要查找的数据位于Request.Form而不是Request.QueryString.

于 2012-07-09T20:46:55.000 回答
2

正如@ThiefMaster♦ 所说,在 POST 中你不能有查询字符串,如果你不想将你的数据序列化到一个特定的对象,你可以使用FormCollection Object它,这样你就可以得到所有的表单元素传递发布到服务器

例如

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

}
于 2012-07-09T20:52:03.147 回答