1

私は次のコードでビューを持っています:

@using (Html.BeginForm("GenerateQrCode", "QrCodeGenerator", FormMethod.Post ))
{
    <input type="submit" value="Generate" />
}

これは、コントローラーのコードを呼び出す送信ボタンです。

    public void GenerateQrCode()
    {

    }

別のページに移動せずに、コントローラーのメソッドがフォームから値を返すことは可能ですか?現在、フォームボタンを押すと、存在しない「GenerateQrCode」ページ(コントローラーメソッドと同じ名前)に移動しようとしていることに気付いたためです。

アップデート:

私が試したのは、コントローラーメソッドがActionResultを返し、「RedirectToAction」を返すようにして、同じビューを呼び出すことです。ただし、このメソッドにもコードがあります'ViewBag.Message = "myMessage"; 次に、私のビューには「@ ViewBag.Message」というコードが含まれていたため、ビューがViewBagメッセージプロパティで更新されることを期待していましたが、表示されません。

4

4 に答える 4

0

これを行う最も簡単な方法は、パラメーターでコントローラーの名前を指定して、RedirectToActionメソッドを使用することでした。また、TempData変数を使用して、結果(この場合は文字列値のみ)をビューに戻し、ViewBag変数に渡しました。

    public ActionResult QrCodeGenerator()
    {
        ViewBag.Message = TempData["Message"];
        return View();
    }

    public ActionResult GenerateQrCode()
    {
        TempData["Message"] = "myMessage";
        return RedirectToAction("QrCodeGenerator");
    }
于 2012-12-09T18:15:36.147 に答える
0

javascriptの使用:クリックイベントを処理します。ハンドラーで、デフォルトのアクションを禁止し、イベントの伝播を停止します。フォームデータを使用してサーバーにAJAX呼び出しを行います。応答を取得し、さらにアクションを実行します。

于 2012-12-09T15:42:42.453 に答える
0

したがって、私がこの権利を持っている場合は、サーバーからの応答を実際に考慮せずにアクションを送信する必要があります。jQueryが必要なようですねpost

$.post(url, $("form selector").serialize(), function () {
    // This is where you put a callback function.
});

必要なのはそれだけです。これにより、データが投稿されます。あなたができることはclick、フォーム送信ボタンの代わりにボタンイベントからこれを呼び出すことです。submitまたは、フォームのイベントをオーバーライドして、これをコードの最初の行として配置することもできます。

e.preventDefault();

eイベントの引数はどこにありますか。これにより、デフォルトのアクション(この場合はフォームの送信と応答のロード)が発生しなくなります。

于 2012-12-09T15:42:50.863 に答える
0

使用しているバージョンHtml.BeginFormは、送信ボタンにGenerateQrCodeアクションに投稿するように指示します。おそらく、あなたはあなたの目的により適した別の過負荷を試すことができますか?Html.BeginForm

于 2012-12-09T15:37:13.757 に答える