6

私の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"];
     }

Request.QueryString ["db"]がnullであるため、変数dbNameはnullです。変数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);
}

ViewModel:

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 に答える