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

您正在使用的版本Html.BeginForm告诉提交按钮发布到GenerateQrCode操作。也许您可以尝试另一种更适合您的目的的重载?Html.BeginForm

于 2012-12-09T15:37:13.757 回答
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 回答