如何实现不更改页面的表单按钮

时间:2012-12-09 15:32:11

标签: asp.net-mvc asp.net-mvc-4

我有一个包含以下代码的视图:

@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 个答案:

答案 0 :(得分:0)

您使用的Html.BeginForm版本告诉提交按钮发布到GenerateQrCode操作。也许您可以尝试更适合您目的的Html.BeginForm {{1}}?

答案 1 :(得分:0)

使用javascript: 处理click事件。 在处理程序中,阻止默认操作并停止事件传播。 Make和AJAX使用表单数据调用服务器。 获得回复并采取进一步行动。

答案 2 :(得分:0)

因此,如果我有这个权利,您希望提交一个操作而不实际考虑服务器的响应。听起来你需要jQuery post

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

这就是你所需要的一切。这将发布数据。你可以做的是从按钮click事件而不是表单提交按钮调用它。或者,您可以覆盖表单上的submit事件,并将其作为第一行代码:

e.preventDefault();

其中e是您的事件参数。这将阻止发生默认操作,在这种情况下是提交表单和加载响应。

答案 3 :(得分:0)

最简单的方法是使用RedirectToAction方法,在参数中指定控制器的名称。我还使用TempData变量将结果(在本例中只是一个字符串值)传递回视图,并传递给ViewBag变量。

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

    public ActionResult GenerateQrCode()
    {
        TempData["Message"] = "myMessage";
        return RedirectToAction("QrCodeGenerator");
    }